You are not logged in.

#1 2018-04-22 18:50:08

volker.raschek
Member
From: Trier
Registered: 2017-12-17
Posts: 9

cinnamon - disable monochrome icons

Hello,
I've updated yesterday cinnamon and nemo. Since the update of cinnamon and nemo I've on the left sidebad monochrome icons.

I tried to change the icon-theme about settings->themes->icons, but my selection of mint-x-aqua does not solve my problem. How can I set the icons for folders in the sidebar of cinnamon back to mint-x-aqua icons instead of monochrom icons?

See my screenshot.
dsvitr4gf1c3d19mo.png


Volker

Offline

#2 2018-04-23 11:24:10

Kamikadze
Member
From: London
Registered: 2018-04-22
Posts: 16

Re: cinnamon - disable monochrome icons

You need to remove these programs, and then type the pacman -Ql cinnamon nemo command and delete all configuration files after you uninstall the program cleanly, or use a better pacman with the key to delete all configuration files. Then install everything again!

Last edited by Kamikadze (2018-04-23 11:24:43)

Offline

#3 2018-04-23 12:15:52

loqs
Member
Registered: 2014-03-06
Posts: 17,371

Re: cinnamon - disable monochrome icons

Kamikadze wrote:

You need to remove these programs, and then type the pacman -Ql cinnamon nemo command and delete all configuration files after you uninstall the program cleanly, or use a better pacman with the key to delete all configuration files. Then install everything again!

Why would you need to uninstall anything?  As pacman does not install per user configuration files removing those packages will still leave the configuration files in the users home directory.
A better pacman such as?
@volker.raschek if you create a new user does that user have the same issue?
Edit:
downgrading to nemo-3.6.5-1 restored the old icon set.  Not sure if this is a bug or an intentional change in nemo.
Edit2:
@volker.raschek you could file a bug report here or upstream see if it is an intentional change or a bug.

Last edited by loqs (2018-04-23 13:55:50)

Offline

#4 2018-04-23 15:30:34

Chazza
Wiki Maintainer
Registered: 2013-06-02
Posts: 506

Re: cinnamon - disable monochrome icons

Reinstalling packages won't solve anything. I highly doubt that nuking config files or creating a fresh user will solve anything either.

My guess is that the Nemo maintainers have patched Nemo to use symbolic icons. If you go to your icon theme's directory (I assume this would be /usr/share/icons/mint-x-aqua) and then you go to say 48x48/places do you find that the *-symbolic.symbolic.png icons there are the ones that you're seeing in your sidebar? If so, then that's your issue and there's only three solutions I can think of:

1) Patch Nemo to not use symbolic icons.

2) Create a copy of the icon theme and replace all the symbolic icon files with symlinks to their non-symbolic versions. You can achieve that fairly easily by running something like the following in the directory that contains the icons in question:

EDIT: don't use this, see Eschwartz's post below.

for x in $(ls | grep symbolic); do
  rm $x
  ln -s ${x/-symbolic.symbolic/} $x
done

3) Learn to live with symbolic icons/use a different file manager. This is not intended to be sarcastic by the way. Unless symbolic icons really bother you and you're desperate to stick with Nemo then trying to fix this with 1 or 2 is probably more trouble than it's worth.

EDIT: Yes, I was right. That's exactly what they've done. See here. So please do NOT file a bug report asking if it's an intentional change as it most definitely is.

Last edited by Chazza (2018-04-23 20:43:41)

Offline

#5 2018-04-23 17:10:48

loqs
Member
Registered: 2014-03-06
Posts: 17,371

Re: cinnamon - disable monochrome icons

Chazza wrote:

EDIT: Yes, I was right. That's exactly what they've done. See here. So please do NOT file a bug report asking if it's an intentional change as it most definitely is.

Thank you for finding the commit reverting it and 12 dependant commits restored the old appearance.
Edit:
I suggested creating a new user to restore all nemo's settings to default obviously in the case the change is hardcoded like this it would make no difference.
Edit2:
I will not be raising this with upstream to avoid negatively impacting my health.

Last edited by loqs (2018-04-23 17:30:24)

Offline

#6 2018-04-23 19:17:25

eschwartz
Fellow
Registered: 2014-08-08
Posts: 4,097

Re: cinnamon - disable monochrome icons

@loqs, I'm super confused here. Surely if the symbolic icons are things someone dislikes, they would dislike it everywhere and not just in nemo... so it would make sense to invest the time in creating an icon theme which they find comfortable. Why mess around with forking one program? If it is just to test whether that is the cause, the commit message alone makes it quite clear.

Chazza wrote:

2) Create a copy of the icon theme and replace all the symbolic icon files with symlinks to their non-symbolic versions. You can achieve that fairly easily by running something like the following in the directory that contains the icons in question:

for x in $(ls | grep symbolic); do
  rm $x
  ln -s ${x/-symbolic.symbolic/} $x
done

That's... I don't even what?

for x in *symbolic*; do
  ln -sf ${x/-symbolic.symbolic/} $x
done

Why would you do dangerously risky things with parsing ls when the most obvious solution to just use the filenames themselves already works flawlessly?

Last edited by eschwartz (2018-04-23 19:20:25)


Managing AUR repos The Right Way -- aurpublish (now a standalone tool)

Offline

#7 2018-04-23 19:23:44

loqs
Member
Registered: 2014-03-06
Posts: 17,371

Re: cinnamon - disable monochrome icons

@Eschwartz I was comfortable with nemo as was so that is what I reverted to.  Other applications that made such a change such as firefox I was not bothered by.
Edit:
I tried the icon theme linking suggestion with the Adwaita icon theme the sidebar icons in nemo became pixelated in bright red and green.

Last edited by loqs (2018-04-23 20:30:10)

Offline

#8 2018-04-23 20:34:40

Chazza
Wiki Maintainer
Registered: 2013-06-02
Posts: 506

Re: cinnamon - disable monochrome icons

Eschwartz wrote:

Why would you do dangerously risky things with parsing ls when the most obvious solution to just use the filenames themselves already works flawlessly?

Oops, thanks Eschwartz. Not sure why I did it that way.

Offline

#9 2018-04-24 09:26:28

Batou
Member
Registered: 2017-01-03
Posts: 259

Re: cinnamon - disable monochrome icons

I don't mind these new icons at all. They're fine by me if they cannot be changed but an option to use the theme icons would be a bonus. I got used to them after a day.

I'd just like to add that new nemo is now by far the best and most feature-complete FM I've used since Finder. It's stable, never crashes and has all the features I missed when I used macOS years ago. Nautilus feels like a Fisher Price toy compared to Nemo. Massive kudos to all the nemo and Cinnamon developers! It's by far the nicest DM environment now and nothing else even comes close. I'm not yet sure how but I'll find a way to contribute to this project.


Please vote for all the AUR packages you're using. You can mass-vote for all of them by doing: "pacman -Qqm | xargs aurvote -v" (make sure to run "aurvote --configure"  first)

Offline

#10 2018-04-24 13:34:21

eschwartz
Fellow
Registered: 2014-08-08
Posts: 4,097

Re: cinnamon - disable monochrome icons

Well, cinnamon is developed by the Linux Mint team, so I guess you could look at https://linuxmint.com/donors.php if contributing code is not up your alley.

Me, I'm excited for the final cinnamon package which will move from js38 to js52, hopefully fix some annoying issues in the process, and move to python3. Still looking to see if some networkmanager fixes make it in (currently held up by lmde3 having broken libnma, sigh).


Managing AUR repos The Right Way -- aurpublish (now a standalone tool)

Offline

#11 2018-04-24 14:22:53

loqs
Member
Registered: 2014-03-06
Posts: 17,371

Re: cinnamon - disable monochrome icons

@Eschwartz were you able to successfully revert the symbolic icons using the script you presented?
Edit:

Batou wrote:

Massive kudos to all the nemo and Cinnamon developers!

Your support for those individuals is really depressing given the negative impact my interactions in them have resulted in.
I hope you will understand why I will not be providing you with any assistance in the future.
https://github.com/linuxmint/cinnamon-c … /issues/65

Last edited by loqs (2018-04-24 18:32:57)

Offline

#12 2018-04-25 01:23:03

Batou
Member
Registered: 2017-01-03
Posts: 259

Re: cinnamon - disable monochrome icons

@Eschwartz Thanks! Just donated some money. I'll also try to contribute some code. First I need to find some part of the project that I can understand.

@loqs You should give them another try. I've only interacted with two people there (mtwebster and one other person who handles applets and whose username I can't remember) and both of them have been extremely helpful and have helped me fix the issues. I've had the worst experience interacting with GNOME folks back in 2015.... but don't really hold any grudges.


Please vote for all the AUR packages you're using. You can mass-vote for all of them by doing: "pacman -Qqm | xargs aurvote -v" (make sure to run "aurvote --configure"  first)

Offline

#13 2018-04-25 10:22:40

loqs
Member
Registered: 2014-03-06
Posts: 17,371

Re: cinnamon - disable monochrome icons

Batou wrote:

@loqs You should give them another try. I've only interacted with two people there (mtwebster and one other person who handles applets and whose username I can't remember) and both of them have been extremely helpful and have helped me fix the issues. I've had the worst experience interacting with GNOME folks back in 2015.... but don't really hold any grudges.

loqs wrote:

I will not be raising this with upstream to avoid negatively impacting my health.

The last interaction was harmful to my health I have no intention of repeating the experience.  I would rather cease using bbs.archlinux.org / bugs.archlinux.org than have any further interaction with those individuals.
Edit:
To be clear for me this is about prioritising my health not holding a grudge.

Last edited by loqs (2018-04-25 10:25:52)

Offline

#14 2018-08-15 17:13:10

BurhanDanger
Member
From: Sylhet, Bangladesh.
Registered: 2016-09-13
Posts: 29

Re: cinnamon - disable monochrome icons

@loqs sorry if I'm rude , do you have a fork of nemo without this weird monochrome icons? I'm stuck on 3.6.5 , it'd be helpful if you have have one with bugfixes.

Offline

#15 2018-08-15 18:28:27

loqs
Member
Registered: 2014-03-06
Posts: 17,371

Re: cinnamon - disable monochrome icons

Sorry no fork this is the dated package I am currently using

# $Id$
# Maintainer: Eli Schwartz <eschwartz@archlinux.org>
# Contributor: Alexandre Filgueira <alexfilgueira@cinnarch.com>
# Contributor: Ner0

pkgname=nemo
pkgver=3.8.0
pkgrel=1
pkgdesc="Cinnamon file manager (Nautilus fork)"
arch=('x86_64')
url="https://github.com/linuxmint/${pkgname}"
license=('GPL')
depends=('cinnamon-desktop' 'dconf' 'gvfs' 'exempi' 'libexif' 'libnotify' 'libxml2' 'python' 'xapps')
optdepends=('cinnamon-translations: i18n'
            'ffmpegthumbnailer: support for video thumbnails')
makedepends=('meson' 'gobject-introspection' 'intltool')
source=("$pkgname-$pkgver.tar.gz::${url}/archive/${pkgver}.tar.gz"
        "revert-symbolic.patch")
sha512sums=('488282d607296bfefa692af2bf12f25fe5f0570945f75fa17ba64dd38eb5b982f8163d311310a6619bdba6241e0b3f15d5bcc10799234a01bc47e7ec63132c25'
            'c5ff2d209cd4604dba0adf4a31129777b65cb3aa9b3152bffef138ee8f223bc09230009e259f5557a7c9987da94c8124a6dc5024a430be1b057af81852e4e755')

prepare() {
    cd "${srcdir}"/${pkgname}-${pkgver}

    # Rename 'Files' app name to avoid having the same as nautilus
    sed -i '/^\[Desktop Entry/,/^\[Desktop Action/ s/^Name\(.*\)=.*/Name\1=Nemo/' data/nemo.desktop.in
    patch -p1 -i ../revert-symbolic.patch
}

build() {
    mkdir -p "${srcdir}"/${pkgname}-${pkgver}/build
    cd "${srcdir}"/${pkgname}-${pkgver}/build

    meson --prefix=/usr \
          --libexecdir=lib/${pkgname} \
          --buildtype=plain \
          ..
    ninja
}

package() {
    cd "${srcdir}"/${pkgname}-${pkgver}/build

    DESTDIR="${pkgdir}" ninja install

    # https://github.com/linuxmint/nemo/pull/1835
#    rm "${pkgdir}"/usr/lib/libnemo-private.a


}
diff --git a/debian/copyright b/debian/copyright
index 0188c1d..b30ef64 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -74,7 +74,6 @@ Files: COPYING.LIB
        libnemo-extension/nemo-column.c
        libnemo-extension/nemo-column.h
        libnemo-extension/nemo-extension-private.h
-       libnemo-extension/nemo-extension-types.c
        libnemo-extension/nemo-extension-types.h
        libnemo-extension/nemo-file-info.c
        libnemo-extension/nemo-file-info.h
@@ -202,15 +201,8 @@ Copyright: 2001-2002, Anders Carlsson
            2002, Sun Microsystems, Inc
 License: LGPL-2+
 
-Files: INSTALL
-       m4/ltoptions.m4
-       m4/ltsugar.m4
-       m4/ltversion.m4
-       m4/lt~obsolete.m4
-       po/Makefile.in.in
-Copyright: 2004-2009, Free Software Foundation
-           2004-2009, Free Software Foundation, Inc
-           2004-2008, Rodney Dawes <dobey.pwns@gmail.com>
+Files: po/Makefile.in.in
+Copyright: 2004-2008, Rodney Dawes <dobey.pwns@gmail.com>
            1995-1997, Ulrich Drepper <drepper@gnu.ai.mit.edu>
 License: Permissive
  This file is free software; the Free Software Foundation gives
diff --git a/libnemo-private/meson.build b/libnemo-private/meson.build
index a0671cf..5dccaf9 100644
--- a/libnemo-private/meson.build
+++ b/libnemo-private/meson.build
@@ -100,7 +100,6 @@ nemo_private_lib = static_library('nemo-private',
   nemo_private_sources,
   dependencies: nemo_private_deps,
   include_directories: [ rootInclude, ],
-  install: true,
   c_args: nemo_definitions,
 )
 
diff --git a/libnemo-private/nemo-bookmark.c b/libnemo-private/nemo-bookmark.c
index 3e07f4d..c0e4f84 100644
--- a/libnemo-private/nemo-bookmark.c
+++ b/libnemo-private/nemo-bookmark.c
@@ -105,7 +105,7 @@ nemo_bookmark_update_icon (NemoBookmark *bookmark)
 					  NEMO_FILE_ATTRIBUTES_FOR_ICON)) {
 		DEBUG ("%s: set new icon", nemo_bookmark_get_name (bookmark));
 
-		new_icon = nemo_file_get_control_icon (bookmark->details->file);
+		new_icon = nemo_file_get_emblemed_icon (bookmark->details->file, 0);
 		g_object_set (bookmark,
 			      "icon", new_icon,
 			      NULL);
@@ -142,13 +142,13 @@ get_default_folder_icon (NemoBookmark *bookmark)
     GIcon *ret = NULL;
 
     if (g_file_is_native (bookmark->details->location)) {
-        ret = g_themed_icon_new (NEMO_ICON_SYMBOLIC_FOLDER);
+        ret = g_themed_icon_new (NEMO_ICON_FOLDER);
     } else {
         gchar *uri = g_file_get_uri (bookmark->details->location);
         if (g_str_has_prefix (uri, EEL_SEARCH_URI)) {
-            ret = g_themed_icon_new (NEMO_ICON_SYMBOLIC_FOLDER_SAVED_SEARCH);
+            ret = g_themed_icon_new (NEMO_ICON_FOLDER_SAVED_SEARCH);
         } else {
-            ret = g_themed_icon_new (NEMO_ICON_SYMBOLIC_FOLDER_REMOTE);
+            ret = g_themed_icon_new (NEMO_ICON_FOLDER_REMOTE);
         }
         g_free (uri);
     }
@@ -162,7 +162,15 @@ construct_default_icon_from_metadata (NemoBookmark *bookmark)
     NemoBookmarkMetadata *md = bookmark->details->metadata;
     GIcon *ret = NULL;
 
-    ret = get_default_folder_icon (bookmark);
+    if (md->icon_name) {
+        ret = g_themed_icon_new (md->icon_name);
+    } else if (md->icon_uri) {
+        GFile *file = g_file_new_for_uri (md->icon_uri);
+        ret = g_file_icon_new (file);
+        g_object_unref (file);
+    } else {
+        ret = get_default_folder_icon (bookmark);
+    }
 
     if (ret != NULL && md->emblems != NULL) {
         guint i = 0;
@@ -237,7 +245,7 @@ metadata_changed (NemoBookmark *bookmark)
 {
     gboolean ret = FALSE;
     NemoBookmarkMetadata *data = nemo_bookmark_get_updated_metadata (bookmark);
-    gboolean has_custom = data && data->emblems;
+    gboolean has_custom = data && (data->icon_uri || data->icon_name || data->emblems);
 
     gboolean had_custom = bookmark->details->metadata != NULL;
 
@@ -817,16 +825,27 @@ nemo_bookmark_get_updated_metadata (NemoBookmark  *bookmark)
 
     if (bookmark->details->file && !nemo_file_is_gone (bookmark->details->file)) {
         GList *custom_emblems = NULL;
+        gchar *custom_icon_uri = NULL;
+        gchar *custom_icon_name = NULL;
 
         custom_emblems = nemo_file_get_metadata_list (bookmark->details->file, NEMO_METADATA_KEY_EMBLEMS);
+        custom_icon_uri = nemo_file_get_metadata (bookmark->details->file, NEMO_METADATA_KEY_CUSTOM_ICON, NULL);
+        custom_icon_name = nemo_file_get_metadata (bookmark->details->file, NEMO_METADATA_KEY_CUSTOM_ICON_NAME, NULL);
 
-        if (custom_emblems) {
+        if (custom_emblems || custom_icon_uri || custom_icon_name) {
             ret = nemo_bookmark_metadata_new ();
-            ret->emblems = char_list_to_strv (custom_emblems);
 
-            g_list_free_full (custom_emblems, g_free);
-        }
+            ret->icon_uri = custom_icon_uri;
+            ret->icon_name = custom_icon_name;
 
+            if (custom_emblems) {
+                ret->emblems = char_list_to_strv (custom_emblems);
+
+                g_list_free_full (custom_emblems, g_free);
+            } else {
+                ret->emblems = NULL;
+            }
+        }
     } else if (bookmark->details->metadata) {
         ret = nemo_bookmark_metadata_copy (bookmark->details->metadata);
     }
@@ -857,6 +876,8 @@ nemo_bookmark_metadata_copy (NemoBookmarkMetadata *meta)
     NemoBookmarkMetadata *copy = nemo_bookmark_metadata_new ();
 
     copy->bookmark_name = g_strdup (meta->bookmark_name);
+    copy->icon_name = g_strdup (meta->icon_name);
+    copy->icon_uri = g_strdup (meta->icon_uri);
     copy->emblems = g_strdupv (meta->emblems);
 
     return copy;
@@ -867,6 +888,8 @@ nemo_bookmark_metadata_compare (NemoBookmarkMetadata *d1,
                                 NemoBookmarkMetadata *d2)
 {
     if (g_strcmp0 (d1->bookmark_name, d2->bookmark_name) != 0 ||
+        g_strcmp0 (d1->icon_uri, d2->icon_uri) != 0 ||
+        g_strcmp0 (d1->icon_name, d2->icon_name) != 0 ||
         (g_strv_length (d1->emblems) != g_strv_length (d2->emblems)))
         return FALSE;
 
@@ -884,6 +907,8 @@ void
 nemo_bookmark_metadata_free (NemoBookmarkMetadata *metadata)
 {
     g_free (metadata->bookmark_name);
+    g_free (metadata->icon_name);
+    g_free (metadata->icon_uri);
     g_strfreev (metadata->emblems);
 
     g_slice_free (NemoBookmarkMetadata, metadata);
diff --git a/libnemo-private/nemo-bookmark.h b/libnemo-private/nemo-bookmark.h
index 0e50e4e..9f23942 100644
--- a/libnemo-private/nemo-bookmark.h
+++ b/libnemo-private/nemo-bookmark.h
@@ -53,6 +53,8 @@ struct NemoBookmark {
 typedef struct
 {
   gchar  *bookmark_name;
+  gchar  *icon_name;
+  gchar  *icon_uri;
   gchar **emblems;
 } NemoBookmarkMetadata;
 
diff --git a/libnemo-private/nemo-file-private.h b/libnemo-private/nemo-file-private.h
index 1cd537b..25e35a8 100644
--- a/libnemo-private/nemo-file-private.h
+++ b/libnemo-private/nemo-file-private.h
@@ -91,7 +91,6 @@ struct NemoFileDetails
 	goffset deep_size;
 
 	GIcon *icon;
-    GIcon *symbolic_icon;
 	
 	char *thumbnail_path;
     eel_boolean_bit thumbnail_access_problem : 1;
diff --git a/libnemo-private/nemo-file-utilities.c b/libnemo-private/nemo-file-utilities.c
index 30c0844..bca84c2 100644
--- a/libnemo-private/nemo-file-utilities.c
+++ b/libnemo-private/nemo-file-utilities.c
@@ -1467,19 +1467,6 @@ nemo_get_cached_x_content_types_for_mount (GMount *mount)
 	return NULL;
 }
 
-GIcon *nemo_get_mount_gicon (GMount *mount)
-{
-    GIcon *icon;
-
-    g_return_val_if_fail (mount != NULL, NULL);
-
-    if (g_mount_can_eject (mount)) {
-        return g_themed_icon_new ("media-removable-symbolic");
-    }
-
-    return g_mount_get_symbolic_icon (mount);
-}
-
 #if !defined (NEMO_OMIT_SELF_CHECK)
 
 void
diff --git a/libnemo-private/nemo-file-utilities.h b/libnemo-private/nemo-file-utilities.h
index 697651f..ea294ae 100644
--- a/libnemo-private/nemo-file-utilities.h
+++ b/libnemo-private/nemo-file-utilities.h
@@ -106,5 +106,4 @@ void nemo_get_x_content_types_for_mount_async (GMount *mount,
 						   GCancellable *cancellable,
 						   gpointer user_data);
 
-GIcon *nemo_get_mount_gicon (GMount *mount);
 #endif /* NEMO_FILE_UTILITIES_H */
diff --git a/libnemo-private/nemo-file.c b/libnemo-private/nemo-file.c
index da2d1e6..3359914 100644
--- a/libnemo-private/nemo-file.c
+++ b/libnemo-private/nemo-file.c
@@ -36,7 +36,6 @@
 #include "nemo-file-operations.h"
 #include "nemo-file-utilities.h"
 #include "nemo-global-preferences.h"
-#include "nemo-icon-names.h"
 #include "nemo-lib-self-check-functions.h"
 #include "nemo-link.h"
 #include "nemo-metadata.h"
@@ -2545,17 +2544,6 @@ update_info_internal (NemoFile *file,
 		file->details->icon = g_object_ref (icon);
 	}
 
-    icon = g_file_info_get_symbolic_icon (info);
-    if (!g_icon_equal (icon, file->details->symbolic_icon)) {
-        changed = TRUE;
-
-        if (file->details->symbolic_icon) {
-            g_object_unref (file->details->symbolic_icon);
-        }
-
-        file->details->symbolic_icon = g_object_ref (icon);
-    }
-
 	thumbnail_path =  g_file_info_get_attribute_byte_string (info, G_FILE_ATTRIBUTE_THUMBNAIL_PATH);
 
 	if (g_strcmp0 (file->details->thumbnail_path, thumbnail_path) != 0) {
@@ -4350,80 +4338,43 @@ nemo_file_get_gicon (NemoFile *file,
 	return g_themed_icon_new ("text-x-generic");
 }
 
-
 GIcon *
-get_symbolic_icon_for_file (NemoFile *file)
-{
-    if (nemo_file_is_home (file)) {
-        return g_themed_icon_new (NEMO_ICON_SYMBOLIC_HOME);
-    }
-
-    // Special folders (XDG)
-    if (nemo_file_is_user_special_directory (file, G_USER_DIRECTORY_DESKTOP)) {
-        return g_themed_icon_new (NEMO_ICON_SYMBOLIC_DESKTOP);
-    }
-
-    if (nemo_file_is_user_special_directory (file, G_USER_DIRECTORY_DOCUMENTS)) {
-        return g_themed_icon_new (NEMO_ICON_SYMBOLIC_FOLDER_DOCUMENTS);
-    }
-
-    if (nemo_file_is_user_special_directory (file, G_USER_DIRECTORY_DOWNLOAD)) {
-        return g_themed_icon_new (NEMO_ICON_SYMBOLIC_FOLDER_DOWNLOAD);
-    }
-
-    if (nemo_file_is_user_special_directory (file, G_USER_DIRECTORY_MUSIC)) {
-        return g_themed_icon_new (NEMO_ICON_SYMBOLIC_FOLDER_MUSIC);
-    }
-
-    if (nemo_file_is_user_special_directory (file, G_USER_DIRECTORY_PICTURES)) {
-        return g_themed_icon_new (NEMO_ICON_SYMBOLIC_FOLDER_PICTURES);
-    }
-
-    if (nemo_file_is_user_special_directory (file, G_USER_DIRECTORY_PUBLIC_SHARE)) {
-        return g_themed_icon_new (NEMO_ICON_SYMBOLIC_FOLDER_PUBLIC_SHARE);
-    }
-
-    if (nemo_file_is_user_special_directory (file, G_USER_DIRECTORY_TEMPLATES)) {
-        return g_themed_icon_new (NEMO_ICON_SYMBOLIC_FOLDER_TEMPLATES);
-    }
-
-    if (nemo_file_is_user_special_directory (file, G_USER_DIRECTORY_VIDEOS)) {
-        return g_themed_icon_new (NEMO_ICON_SYMBOLIC_FOLDER_VIDEOS);
-    }
-
-    if (nemo_file_is_user_special_directory (file, G_USER_DIRECTORY_TEMPLATES)) {
-        return g_themed_icon_new (NEMO_ICON_SYMBOLIC_FOLDER_TEMPLATES);
-    }
-
-    if (file->details->mime_type != NULL) {
-        return g_content_type_get_symbolic_icon (file->details->mime_type);
-    } else {
-        return NULL;
-    }
-}
-
-GIcon *
-nemo_file_get_control_icon (NemoFile *file)
-{
-    GIcon *gicon;
-
-    if (file->details->symbolic_icon != NULL) {
-        gicon = g_object_ref (file->details->symbolic_icon);
-    } else {
-        gchar *uri;
-
-        uri = nemo_file_get_uri (file);
-
-        if (eel_uri_is_search (uri)) {
-            gicon = g_themed_icon_new (NEMO_ICON_SYMBOLIC_FOLDER_SAVED_SEARCH);
-        } else {
-            gicon = get_symbolic_icon_for_file (file);
+nemo_file_get_emblemed_icon (NemoFile *file,
+                             NemoFileIconFlags flags)
+{
+    GIcon *gicon, *emblem_icon, *emblemed_icon;
+    GEmblem *emblem;
+    GList *emblem_icons, *l;
+    char *emblems_to_ignore[3];
+    int i;
+
+    gicon = nemo_file_get_gicon (file, flags);
+
+    i = 0;
+    emblems_to_ignore[i++] = (char *)NEMO_FILE_EMBLEM_NAME_TRASH;
+    emblems_to_ignore[i++] = (char *)NEMO_FILE_EMBLEM_NAME_CANT_WRITE;
+    emblems_to_ignore[i++] = NULL;
+
+    emblem = NULL;
+    emblem_icons = nemo_file_get_emblem_icons (file,
+    emblems_to_ignore);
+
+    emblemed_icon = g_emblemed_icon_new (gicon, NULL);
+    g_object_unref (gicon);
+
+    /* pick only the first emblem we can render for the tree view */
+    for (l = emblem_icons; l != NULL; l = l->next) {
+        emblem_icon = l->data;
+        if (nemo_icon_theme_can_render (G_THEMED_ICON (emblem_icon))) {
+            emblem = g_emblem_new (emblem_icon);
+            g_emblemed_icon_add_emblem (G_EMBLEMED_ICON (emblemed_icon), emblem);
+            g_object_unref (emblem);
         }
-
-        g_free (uri);
     }
 
-    return gicon;
+    g_list_free_full (emblem_icons, g_object_unref);
+
+    return emblemed_icon;
 }
 
 static gint
diff --git a/libnemo-private/nemo-file.h b/libnemo-private/nemo-file.h
index 7a09ae6..f451e13 100644
--- a/libnemo-private/nemo-file.h
+++ b/libnemo-private/nemo-file.h
@@ -450,7 +450,8 @@ char *                  nemo_file_get_drop_target_uri               (NemoFile
 
 GIcon *                 nemo_file_get_gicon                         (NemoFile                   *file,
                                                                      NemoFileIconFlags           flags);
-GIcon *                 nemo_file_get_control_icon                  (NemoFile                   *file);
+GIcon *                 nemo_file_get_emblemed_icon                 (NemoFile                   *file,
+                                                                     NemoFileIconFlags           flags);
 
 NemoIconInfo *      nemo_file_get_icon                          (NemoFile                   *file,
 									 int                             size,
diff --git a/libnemo-private/nemo-icon-info.c b/libnemo-private/nemo-icon-info.c
index 683d35e..5346654 100644
--- a/libnemo-private/nemo-icon-info.c
+++ b/libnemo-private/nemo-icon-info.c
@@ -750,6 +750,26 @@ nemo_icon_get_emblem_size_for_icon_size (guint size)
 	return 0; /* no emblems for smaller sizes */
 }
 
+gboolean
+nemo_icon_theme_can_render (GThemedIcon *icon)
+{
+	GtkIconTheme *icon_theme;
+	const gchar * const *names;
+	gint idx;
+
+	names = g_themed_icon_get_names (icon);
+
+	icon_theme = gtk_icon_theme_get_default ();
+
+	for (idx = 0; names[idx] != NULL; idx++) {
+		if (gtk_icon_theme_has_icon (icon_theme, names[idx])) {
+			return TRUE;
+		}
+	}
+
+	return FALSE;
+}
+
 GIcon *
 nemo_user_special_directory_get_gicon (GUserDirectory directory)
 {
diff --git a/libnemo-private/nemo-icon-info.h b/libnemo-private/nemo-icon-info.h
index bfc4770..23489d5 100644
--- a/libnemo-private/nemo-icon-info.h
+++ b/libnemo-private/nemo-icon-info.h
@@ -98,6 +98,7 @@ guint nemo_get_desktop_icon_size_for_zoom_level  (NemoZoomLevel  zoom_level);
 gint  nemo_get_icon_size_for_stock_size          (GtkIconSize        size);
 guint nemo_icon_get_emblem_size_for_icon_size    (guint              size);
 
+gboolean nemo_icon_theme_can_render              (GThemedIcon *icon);
 GIcon * nemo_user_special_directory_get_gicon (GUserDirectory directory);
 
 
diff --git a/libnemo-private/nemo-icon-names.h b/libnemo-private/nemo-icon-names.h
index 14b354a..5c26c0c 100644
--- a/libnemo-private/nemo-icon-names.h
+++ b/libnemo-private/nemo-icon-names.h
@@ -31,34 +31,5 @@
 /* Icons not provided by fd.o naming spec or nemo itself */
 #define NEMO_ICON_BURN		"nemo-cd-burner"
 
-#define NEMO_ICON_SYMBOLIC_COMPUTER      "computer-symbolic"
-#define NEMO_ICON_SYMBOLIC_DESKTOP       "user-desktop-symbolic"
-#define NEMO_ICON_SYMBOLIC_FILESYSTEM    "drive-harddisk-symbolic"
-#define NEMO_ICON_SYMBOLIC_FOLDER        "folder-symbolic"
-#define NEMO_ICON_SYMBOLIC_FOLDER_REMOTE "folder-remote-symbolic"
-#define NEMO_ICON_SYMBOLIC_HOME      "user-home-symbolic"
-#define NEMO_ICON_SYMBOLIC_NETWORK       "network-workgroup-symbolic"
-#define NEMO_ICON_SYMBOLIC_NETWORK_SERVER    "network-server-symbolic"
-#define NEMO_ICON_SYMBOLIC_TRASH     "user-trash-symbolic"
-#define NEMO_ICON_SYMBOLIC_TRASH_FULL    "user-trash-full-symbolic"
-
-#define NEMO_ICON_SYMBOLIC_FOLDER_DOCUMENTS  "folder-documents-symbolic"
-#define NEMO_ICON_SYMBOLIC_FOLDER_DOWNLOAD   "folder-download-symbolic"
-#define NEMO_ICON_SYMBOLIC_FOLDER_MUSIC      "folder-music-symbolic"
-#define NEMO_ICON_SYMBOLIC_FOLDER_PICTURES   "folder-pictures-symbolic"
-#define NEMO_ICON_SYMBOLIC_FOLDER_PUBLIC_SHARE "folder-publicshare-symbolic"
-#define NEMO_ICON_SYMBOLIC_FOLDER_TEMPLATES  "folder-templates-symbolic"
-#define NEMO_ICON_SYMBOLIC_FOLDER_VIDEOS     "folder-videos-symbolic"
-#define NEMO_ICON_SYMBOLIC_FOLDER_SAVED_SEARCH "folder-saved-search-symbolic"
-
-
-
-
-
-
-
-
-
-
 #endif /* NEMO_ICON_NAMES_H */
 
diff --git a/libnemo-private/nemo-trash-monitor.c b/libnemo-private/nemo-trash-monitor.c
index ab3fff6..57327b7 100644
--- a/libnemo-private/nemo-trash-monitor.c
+++ b/libnemo-private/nemo-trash-monitor.c
@@ -37,7 +37,6 @@
 struct NemoTrashMonitorDetails {
 	gboolean empty;
 	GIcon *icon;
-    GIcon *symbolic_icon;
 	GFileMonitor *file_monitor;
 };
 
@@ -61,9 +60,6 @@ nemo_trash_monitor_finalize (GObject *object)
 	if (trash_monitor->details->icon) {
 		g_object_unref (trash_monitor->details->icon);
 	}
-    if (trash_monitor->details->symbolic_icon) {
-        g_object_unref (trash_monitor->details->symbolic_icon);
-    }
 	if (trash_monitor->details->file_monitor) {
 		g_object_unref (trash_monitor->details->file_monitor);
 	}
@@ -100,10 +96,8 @@ update_icon (NemoTrashMonitor *trash_monitor)
 
 	if (trash_monitor->details->empty) {
 		trash_monitor->details->icon = g_themed_icon_new (NEMO_ICON_TRASH);
-        trash_monitor->details->symbolic_icon = g_themed_icon_new (NEMO_ICON_SYMBOLIC_TRASH);
 	} else {
 		trash_monitor->details->icon = g_themed_icon_new (NEMO_ICON_TRASH_FULL);
-        trash_monitor->details->symbolic_icon = g_themed_icon_new (NEMO_ICON_SYMBOLIC_TRASH_FULL);
 	}
 }
 
@@ -249,18 +243,6 @@ nemo_trash_monitor_get_icon (void)
 	return NULL;
 }
 
-GIcon *
-nemo_trash_monitor_get_symbolic_icon (void)
-{
-    NemoTrashMonitor *monitor;
-
-    monitor = nemo_trash_monitor_get ();
-    if (monitor->details->symbolic_icon) {
-        return g_object_ref (monitor->details->symbolic_icon);
-    }
-    return NULL;
-}
-
 void
 nemo_trash_monitor_add_new_trash_directories (void)
 {
diff --git a/libnemo-private/nemo-trash-monitor.h b/libnemo-private/nemo-trash-monitor.h
index 6033663..bf453d4 100644
--- a/libnemo-private/nemo-trash-monitor.h
+++ b/libnemo-private/nemo-trash-monitor.h
@@ -62,7 +62,6 @@ GType			nemo_trash_monitor_get_type				(void);
 NemoTrashMonitor   *nemo_trash_monitor_get 				(void);
 gboolean		nemo_trash_monitor_is_empty 			(void);
 GIcon                  *nemo_trash_monitor_get_icon                         (void);
-GIcon                  *nemo_trash_monitor_get_symbolic_icon                (void);
 
 void		        nemo_trash_monitor_add_new_trash_directories        (void);
 
diff --git a/src/nemo-bookmark-list.c b/src/nemo-bookmark-list.c
index 7bb316a..3049560 100644
--- a/src/nemo-bookmark-list.c
+++ b/src/nemo-bookmark-list.c
@@ -676,7 +676,14 @@ load_bookmark_metadata_file (NemoBookmarkList *list)
             NemoBookmarkMetadata *meta = nemo_bookmark_metadata_new ();
 
             meta->bookmark_name = g_strdup (items[i]);
-
+            meta->icon_uri = g_key_file_get_string (kfile,
+                                                    items[i],
+                                                    KEY_ICON_URI,
+                                                    NULL);
+            meta->icon_name = g_key_file_get_string (kfile,
+                                                     items[i],
+                                                     KEY_ICON_NAME,
+                                                     NULL);
             meta->emblems = g_key_file_get_string_list (kfile,
                                                         items[i],
                                                         KEY_ICON_EMBLEMS,
@@ -855,6 +862,18 @@ save_bookmark_metadata_file (NemoBookmarkList *list)
         if (data == NULL)
             continue;
 
+        if (data->icon_uri)
+            g_key_file_set_string (kfile,
+                                   nemo_bookmark_get_name (bookmark),
+                                   KEY_ICON_URI,
+                                   data->icon_uri);
+
+        if (data->icon_name)
+            g_key_file_set_string (kfile,
+                                   nemo_bookmark_get_name (bookmark),
+                                   KEY_ICON_NAME,
+                                   data->icon_name);
+
         if (data->emblems) {
             g_key_file_set_string_list (kfile,
                                         nemo_bookmark_get_name (bookmark),
diff --git a/src/nemo-list-model.c b/src/nemo-list-model.c
index f297d01..880c31d 100644
--- a/src/nemo-list-model.c
+++ b/src/nemo-list-model.c
@@ -368,14 +368,16 @@ nemo_list_model_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, int colu
 			/* pick only the first emblem we can render for the list view */
 			for (l = emblem_icons; !bad_ratio && l != NULL; l = l->next) {
 				emblem_icon = l->data;
-				emblem = g_emblem_new (emblem_icon);
-				emblemed_icon = g_emblemed_icon_new (gicon, emblem);
+				if (nemo_icon_theme_can_render (G_THEMED_ICON (emblem_icon))) {
+					emblem = g_emblem_new (emblem_icon);
+					emblemed_icon = g_emblemed_icon_new (gicon, emblem);
 
-				g_object_unref (gicon);
-				g_object_unref (emblem);
-				gicon = emblemed_icon;
+					g_object_unref (gicon);
+					g_object_unref (emblem);
+					gicon = emblemed_icon;
 
-				break;
+					break;
+				}
 			}
 
 			g_list_free_full (emblem_icons, g_object_unref);
diff --git a/src/nemo-list-view.c b/src/nemo-list-view.c
index ae0f728..66e85b8 100644
--- a/src/nemo-list-view.c
+++ b/src/nemo-list-view.c
@@ -98,8 +98,6 @@ struct NemoListViewDetails {
 	gboolean menus_ready;
 	gboolean active;
 
-    gboolean rubber_banding;
-
 	GHashTable *columns;
 	GtkWidget *column_editor;
 
@@ -583,9 +581,9 @@ motion_notify_callback (GtkWidget *widget,
 
 	view = NEMO_LIST_VIEW (callback_data);
 
-    if (event->window != gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget))) {
-        return GDK_EVENT_PROPAGATE;
-    }
+	if (event->window != gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget))) {
+		return FALSE;
+	}
 
 	if (get_click_policy () == NEMO_CLICK_POLICY_SINGLE) {
 		GtkTreePath *old_hover_path;
@@ -609,68 +607,27 @@ motion_notify_callback (GtkWidget *widget,
 		}
 	}
 
-    /* If we're already rubber-banding, we can skip all of this logic and just let the parent
-     * class continue to handle selection */
-    if (view->details->drag_button != 0 && !view->details->rubber_banding) {
-        GtkTreePath *path;
-        GtkTreeSelection *selection;
-        gboolean is_new_self_selection;
-
-        selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
-
-        gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget),
-                           event->x, event->y,
-                           &path,
-                           NULL, NULL, NULL);
-
-        /* This looks complicated but it's just verbose:  We'll only consider allowing rubber-banding
-         * to begin if the following are TRUE: a) The current row is the only row currently selected,
-         * and  b) This is the first click that's been made on this row - meaning, the button-press-event
-         * that preceded this motion-event was the one that caused this row to be selected. */
-        is_new_self_selection = gtk_tree_selection_count_selected_rows (selection) == 1 &&
-                                gtk_tree_selection_path_is_selected (selection, path) &&
-                                (!view->details->double_click_path[1] ||
-                                (view->details->double_click_path[1] &&
-                                gtk_tree_path_compare (view->details->double_click_path[0],
-                                                       view->details->double_click_path[1]) != 0));
-
-        gtk_tree_path_free (path);
-
-        /* We also want to further restrict rubber-banding to be initiated only in blank areas of the row.
-         * This allows DnD to operate on a new selection like before, when the motion begins over text or
-         * icons */
-        if (is_new_self_selection && gtk_tree_view_is_blank_at_pos (GTK_TREE_VIEW (widget),
-                                                                    event->x, event->y,
-                                                                    NULL, NULL, NULL, NULL)) {
-            /* If this is a candidate for rubber-banding, track that state in the view, and allow the event
-             * to continue into Gtk (which handles rubber-band selection for us) */
-            view->details->rubber_banding = TRUE;
-
-            return GDK_EVENT_PROPAGATE;
-        }
-
-        /* All other cases, allow DnD to potentially begin */
-        if (!source_target_list) {
-            source_target_list = nemo_list_model_get_drag_target_list ();
-        }
-
-        if (gtk_drag_check_threshold (widget,
-                                      view->details->drag_x,
-                                      view->details->drag_y,
-                                      event->x,
-                                      event->y)) {
-            gtk_drag_begin (widget,
-                            source_target_list,
-                            GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_ASK,
-                            view->details->drag_button,
-                            (GdkEvent*) event);
-        }
+	if (view->details->drag_button != 0) {
+		if (!source_target_list) {
+			source_target_list = nemo_list_model_get_drag_target_list ();
+		}
 
-        /* The event is handled by the DnD begin, don't propagate further */
-        return GDK_EVENT_STOP;
-    }
+		if (gtk_drag_check_threshold (widget,
+					      view->details->drag_x,
+					      view->details->drag_y,
+					      event->x,
+					      event->y)) {
+			gtk_drag_begin
+				(widget,
+				 source_target_list,
+				 GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_ASK,
+				 view->details->drag_button,
+				 (GdkEvent*)event);
+		}
+		return TRUE;
+	}
 
-    return GDK_EVENT_PROPAGATE;
+	return FALSE;
 }
 
 static gboolean
@@ -1220,8 +1177,6 @@ button_release_callback (GtkWidget *widget,
 
 	view = NEMO_LIST_VIEW (callback_data);
 
-    view->details->rubber_banding = FALSE;
-
 	if (event->button == view->details->drag_button) {
 		stop_drag_check (view);
 		if (!view->details->drag_started &&
@@ -2148,9 +2103,6 @@ create_and_set_up_tree_view (NemoListView *view)
 	gchar **default_column_order, **default_visible_columns;
 
 	view->details->tree_view = GTK_TREE_VIEW (gtk_tree_view_new ());
-
-    gtk_tree_view_set_rubber_banding (GTK_TREE_VIEW (view->details->tree_view), TRUE);
-
 	view->details->columns = g_hash_table_new_full (g_str_hash,
 							g_str_equal,
 							(GDestroyNotify) g_free,
diff --git a/src/nemo-pathbar.c b/src/nemo-pathbar.c
index 5c34b42..157b3b3 100644
--- a/src/nemo-pathbar.c
+++ b/src/nemo-pathbar.c
@@ -86,7 +86,11 @@ typedef struct {
     NemoFile *file;
     unsigned int file_changed_signal_id;
 
-    GIcon *mount_icon;
+    /* custom icon */
+    GdkPixbuf *custom_icon;
+
+    char *xdg_icon;
+
     /* flag to indicate its the base folder in the URI */
     gboolean is_base_dir;
 
@@ -124,6 +128,7 @@ struct _NemoPathBarDetails {
 	GtkWidget *up_slider_button;
 	GtkWidget *down_slider_button;
 	guint settings_signal_id;
+	gint icon_size;
 	gint slider_width;
 	gint16 spacing;
 	gint16 button_offset;
@@ -150,9 +155,11 @@ static gboolean nemo_path_bar_slider_button_release    (GtkWidget       *widget,
                                 GdkEventButton  *event,
                                 NemoPathBar *path_bar);
 static void     nemo_path_bar_check_icon_theme         (NemoPathBar *path_bar);
-static void     nemo_path_bar_update_button_appearance (ButtonData      *button_data);
+static void     nemo_path_bar_update_button_appearance (ButtonData      *button_data,
+                                                        gint             scale);
 static void     nemo_path_bar_update_button_state      (ButtonData      *button_data,
-                                gboolean         current_dir);
+                                gboolean         current_dir,
+                                gint             scale);
 static gboolean nemo_path_bar_update_path              (NemoPathBar *path_bar,
                                 GFile           *file_path,
                                 gboolean         emit_signal);
@@ -240,10 +247,14 @@ trash_state_changed_cb (NemoTrashMonitor *monitor,
         button_data = BUTTON_DATA (list->data);
         if (g_file_equal (file, button_data->path)) {
             GIcon *icon;
-
-            icon = nemo_trash_monitor_get_symbolic_icon ();
-
-            gtk_image_set_from_gicon (GTK_IMAGE (button_data->image), icon, GTK_ICON_SIZE_MENU);
+            NemoIconInfo *icon_info;
+            GdkPixbuf *pixbuf;
+
+            icon = nemo_trash_monitor_get_icon ();
+            icon_info = nemo_icon_info_lookup (icon, NEMO_PATH_BAR_ICON_SIZE,
+                                               gtk_widget_get_scale_factor (GTK_WIDGET (path_bar)));
+            pixbuf = nemo_icon_info_get_pixbuf_at_size (icon_info, NEMO_PATH_BAR_ICON_SIZE);
+            gtk_image_set_from_pixbuf (GTK_IMAGE (button_data->image), pixbuf);
         }
     }
     g_object_unref (file);
@@ -344,6 +355,7 @@ nemo_path_bar_init (NemoPathBar *path_bar)
 
     path_bar->priv->up_slider_button = get_slider_button (path_bar, GTK_POS_LEFT);
     path_bar->priv->down_slider_button = get_slider_button (path_bar, GTK_POS_RIGHT);
+    path_bar->priv->icon_size = NEMO_PATH_BAR_ICON_SIZE;
 
     p = nemo_get_desktop_directory ();
     path_bar->priv->desktop_path = g_file_new_for_path (p);
@@ -1375,7 +1387,8 @@ reload_icons (NemoPathBar *path_bar)
         ButtonData *button_data;
         button_data = BUTTON_DATA (list->data);
         if (button_data->type != NORMAL_BUTTON || button_data->is_base_dir) {
-            nemo_path_bar_update_button_appearance (button_data);
+            nemo_path_bar_update_button_appearance (button_data,
+                                                    gtk_widget_get_scale_factor (GTK_WIDGET (path_bar)));
         }
     }
 }
@@ -1444,14 +1457,53 @@ button_clicked_cb (GtkWidget *button,
     g_signal_emit (path_bar, path_bar_signals [PATH_CLICKED], 0, button_data->path);
 }
 
+static NemoIconInfo *
+get_type_icon_info (ButtonData *button_data, gint scale)
+{
+    switch (button_data->type)
+        {
+        case ROOT_BUTTON:
+            return nemo_icon_info_lookup_from_name (NEMO_ICON_FILESYSTEM,
+                                    NEMO_PATH_BAR_ICON_SIZE, scale);
+
+        case HOME_BUTTON:
+            return nemo_icon_info_lookup_from_name (NEMO_ICON_HOME,
+                                    NEMO_PATH_BAR_ICON_SIZE, scale);
+
+        case DESKTOP_BUTTON:
+            return nemo_icon_info_lookup_from_name (NEMO_ICON_DESKTOP,
+                                    NEMO_PATH_BAR_ICON_SIZE, scale);
+        case XDG_BUTTON:
+            return nemo_icon_info_lookup_from_name (button_data->xdg_icon,
+                                NEMO_PATH_BAR_ICON_SIZE, scale);
+        case NORMAL_BUTTON:
+            if (button_data->is_base_dir) {
+                return nemo_file_get_icon (button_data->file,
+                                   NEMO_PATH_BAR_ICON_SIZE, 0,
+                                   scale,
+                                   NEMO_FILE_ICON_FLAGS_NONE);
+            }
+            return NULL;
+        case DEFAULT_LOCATION_BUTTON:
+        case MOUNT_BUTTON:
+        default:
+            return NULL;
+        }
+
+    return NULL;
+}
+
 static void
 button_data_free (ButtonData *button_data)
 {
     g_object_unref (button_data->path);
     g_free (button_data->dir_name);
-
-    g_clear_object (&button_data->mount_icon);
-
+    if (button_data->custom_icon) {
+        g_object_unref (button_data->custom_icon);
+    }
+    if (button_data->type == XDG_BUTTON) {
+        g_free (button_data->xdg_icon);
+    }
     if (button_data->file != NULL) {
         g_signal_handler_disconnect (button_data->file,
                          button_data->file_changed_signal_id);
@@ -1507,10 +1559,10 @@ set_label_padding_size (ButtonData *button_data)
 }
 
 static void
-nemo_path_bar_update_button_appearance (ButtonData *button_data)
+nemo_path_bar_update_button_appearance (ButtonData *button_data, gint scale)
 {
-    GIcon *gicon;
-
+    NemoIconInfo *icon_info;
+    GdkPixbuf *pixbuf;
     const gchar *dir_name = get_dir_name (button_data);
 
     if (button_data->label != NULL) {
@@ -1530,47 +1582,46 @@ nemo_path_bar_update_button_appearance (ButtonData *button_data)
     }
 
     if (button_data->image != NULL) {
-        switch (button_data->type) {
-            case ROOT_BUTTON:
-                gicon = g_themed_icon_new (NEMO_ICON_SYMBOLIC_FILESYSTEM);
-                break;
-            case HOME_BUTTON:
-            case DESKTOP_BUTTON:
-            case XDG_BUTTON:
-                gicon = nemo_file_get_control_icon (button_data->file);
-                break;
-            case NORMAL_BUTTON:
-                if (button_data->is_base_dir) {
-                    gicon = nemo_file_get_control_icon (button_data->file);
-                    break;
-                }
-            case DEFAULT_LOCATION_BUTTON:
-            case MOUNT_BUTTON:
-                if (button_data->mount_icon) {
-                    gicon = button_data->mount_icon;
-                    break;
-                }
-            default:
-                gicon = NULL;
-         }
+        if (button_data->custom_icon) {
+            cairo_surface_t *surface;
+            surface = gdk_cairo_surface_create_from_pixbuf (button_data->custom_icon, scale, NULL);
+            g_object_set (GTK_IMAGE (button_data->image), "surface", surface, NULL);
+            gtk_widget_show (GTK_WIDGET (button_data->image));
+        } else {
+            icon_info = get_type_icon_info (button_data, scale);
+
+            pixbuf = NULL;
+
+            if (icon_info != NULL) {
+                pixbuf = nemo_icon_info_get_pixbuf_at_size (icon_info, NEMO_PATH_BAR_ICON_SIZE);
+                g_object_unref (icon_info);
+            }
 
-        gtk_image_set_from_gicon (GTK_IMAGE (button_data->image),
-                                  gicon,
-                                  GTK_ICON_SIZE_MENU);
+            if (pixbuf != NULL) {
+                cairo_surface_t *surface;
+                surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale, NULL);
+                g_object_set (GTK_IMAGE (button_data->image), "surface", surface, NULL);
+                gtk_widget_show (GTK_WIDGET (button_data->image));
+                g_object_unref (pixbuf);
+            } else {
+                gtk_widget_hide (GTK_WIDGET (button_data->image));
+            }
+        }
     }
 
 }
 
 static void
 nemo_path_bar_update_button_state (ButtonData *button_data,
-                                   gboolean    current_dir)
+                       gboolean    current_dir,
+                       gint        scale)
 {
     if (button_data->label != NULL) {
         gtk_label_set_label (GTK_LABEL (button_data->label), NULL);
         gtk_label_set_use_markup (GTK_LABEL (button_data->label), current_dir);
     }
 
-    nemo_path_bar_update_button_appearance (button_data);
+    nemo_path_bar_update_button_appearance (button_data, scale);
 
     if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button_data->button)) != current_dir) {
         button_data->ignore_changes = TRUE;
@@ -1580,12 +1631,14 @@ nemo_path_bar_update_button_state (ButtonData *button_data,
 }
 
 static gboolean
-setup_file_path_mounted_mount (GFile *location, ButtonData *button_data)
+setup_file_path_mounted_mount (GFile *location, ButtonData *button_data, gint scale)
 {
     GVolumeMonitor *volume_monitor;
     GList *mounts, *l;
     GMount *mount;
     gboolean result;
+    GIcon *icon;
+    NemoIconInfo *info;
     GFile *root, *default_location;
 
     result = FALSE;
@@ -1604,7 +1657,14 @@ setup_file_path_mounted_mount (GFile *location, ButtonData *button_data)
             result = TRUE;
             /* set mount specific details in button_data */
             if (button_data) {
-                button_data->mount_icon = nemo_get_mount_gicon (mount);
+                icon = g_mount_get_icon (mount);
+                if (icon == NULL) {
+                    icon = g_themed_icon_new (NEMO_ICON_FOLDER);
+                }
+                info = nemo_icon_info_lookup (icon, NEMO_PATH_BAR_ICON_SIZE, scale);
+                g_object_unref (icon);
+                button_data->custom_icon = nemo_icon_info_get_pixbuf_at_size (info, NEMO_PATH_BAR_ICON_SIZE);
+                g_object_unref (info);
                 button_data->dir_name = g_mount_get_name (mount);
                 button_data->type = MOUNT_BUTTON;
                 button_data->fake_root = TRUE;
@@ -1618,7 +1678,14 @@ setup_file_path_mounted_mount (GFile *location, ButtonData *button_data)
             result = TRUE;
             /* set mount specific details in button_data */
             if (button_data) {
-                button_data->mount_icon = nemo_get_mount_gicon (mount);
+                icon = g_mount_get_icon (mount);
+                if (icon == NULL) {
+                    icon = g_themed_icon_new (NEMO_ICON_FOLDER);
+                }
+                info = nemo_icon_info_lookup (icon, NEMO_PATH_BAR_ICON_SIZE, scale);
+                g_object_unref (icon);
+                button_data->custom_icon = nemo_icon_info_get_pixbuf_at_size (info, NEMO_PATH_BAR_ICON_SIZE);
+                g_object_unref (info);
                 button_data->type = DEFAULT_LOCATION_BUTTON;
                 button_data->fake_root = TRUE;
             }
@@ -1651,19 +1718,27 @@ setup_button_type (ButtonData       *button_data,
         }
     } else if (path_bar->priv->xdg_documents_path != NULL && g_file_equal (location, path_bar->priv->xdg_documents_path)) {
         button_data->type = XDG_BUTTON;
+        button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_DOCUMENTS);
     } else if (path_bar->priv->xdg_download_path != NULL && g_file_equal (location, path_bar->priv->xdg_download_path)) {
         button_data->type = XDG_BUTTON;
+        button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_DOWNLOAD);
     } else if (path_bar->priv->xdg_music_path != NULL && g_file_equal (location, path_bar->priv->xdg_music_path)) {
         button_data->type = XDG_BUTTON;
+        button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_MUSIC);
     } else if (path_bar->priv->xdg_pictures_path != NULL && g_file_equal (location, path_bar->priv->xdg_pictures_path)) {
         button_data->type = XDG_BUTTON;
+        button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_PICTURES);
     } else if (path_bar->priv->xdg_templates_path != NULL && g_file_equal (location, path_bar->priv->xdg_templates_path)) {
         button_data->type = XDG_BUTTON;
+        button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_TEMPLATES);
     } else if (path_bar->priv->xdg_videos_path != NULL && g_file_equal (location, path_bar->priv->xdg_videos_path)) {
         button_data->type = XDG_BUTTON;
+        button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_VIDEOS);
     } else if (path_bar->priv->xdg_public_path != NULL && g_file_equal (location, path_bar->priv->xdg_public_path)) {
         button_data->type = XDG_BUTTON;
-    } else if (setup_file_path_mounted_mount (location, button_data)) {
+        button_data->xdg_icon = g_strdup (NEMO_ICON_FOLDER_PUBLIC_SHARE);
+    } else if (setup_file_path_mounted_mount (location, button_data,
+                                              gtk_widget_get_scale_factor (GTK_WIDGET (path_bar)))) {
         /* already setup */
     } else {
         button_data->type = NORMAL_BUTTON;
@@ -1827,7 +1902,8 @@ button_data_file_changed (NemoFile *file,
 
         g_free (display_name);
     }
-    nemo_path_bar_update_button_appearance (button_data);
+    nemo_path_bar_update_button_appearance (button_data,
+                                            gtk_widget_get_scale_factor (GTK_WIDGET (path_bar)));
 }
 
 static ButtonData *
@@ -1902,7 +1978,8 @@ make_directory_button (NemoPathBar  *path_bar,
     gtk_container_add (GTK_CONTAINER (button_data->button), child);
     gtk_widget_show_all (button_data->button);
 
-    nemo_path_bar_update_button_state (button_data, current_dir);
+    nemo_path_bar_update_button_state (button_data, current_dir,
+                                       gtk_widget_get_scale_factor (GTK_WIDGET (path_bar)));
 
     g_signal_connect (button_data->button, "clicked", G_CALLBACK (button_clicked_cb), button_data);
     g_object_weak_ref (G_OBJECT (button_data->button), (GWeakNotify) button_data_free, button_data);
@@ -1966,7 +2043,8 @@ nemo_path_bar_check_parent_path (NemoPathBar *path_bar,
 
         for (list = path_bar->priv->button_list; list; list = list->next) {
             nemo_path_bar_update_button_state (BUTTON_DATA (list->data),
-                                   (list == current_path) ? TRUE : FALSE);
+                                   (list == current_path) ? TRUE : FALSE,
+                                   gtk_widget_get_scale_factor (GTK_WIDGET (path_bar)));
         }
 
         if (!gtk_widget_get_child_visible (BUTTON_DATA (current_path->data)->button)) {
diff --git a/src/nemo-places-sidebar.c b/src/nemo-places-sidebar.c
index b17963e..8c40fa4 100644
--- a/src/nemo-places-sidebar.c
+++ b/src/nemo-places-sidebar.c
@@ -77,7 +77,7 @@
 typedef struct {
 	GtkScrolledWindow  parent;
 	GtkTreeView        *tree_view;
-    GtkCellRenderer    *eject_icon_cell_renderer;
+	GtkCellRenderer    *eject_icon_cell_renderer;
 	char 	           *uri;
 	GtkTreeStore       *store;
     GtkTreeModel       *store_filter;
@@ -124,6 +124,8 @@ typedef struct {
 	NemoWindowSlot *go_to_after_mount_slot;
 	NemoWindowOpenFlags go_to_after_mount_flags;
 
+	GtkTreePath *eject_highlight_path;
+
     NotifyNotification *unmount_notify;
 
 	guint bookmarks_changed_id;
@@ -328,6 +330,61 @@ decrement_bookmark_breakpoint (NemoPlacesSidebar *sidebar)
     g_signal_handlers_unblock_by_func (nemo_window_state, breakpoint_changed_cb, sidebar);
 }
 
+static cairo_surface_t *
+get_eject_icon (NemoPlacesSidebar *sidebar,
+		gboolean highlighted)
+{
+	GdkPixbuf *eject;
+	GtkIconInfo *icon_info;
+	GIcon *icon;
+	int icon_size;
+	GtkIconTheme *icon_theme;
+	GtkStyleContext *style;
+	GtkStateFlags state;
+    cairo_surface_t *surface;
+    gint scale = 1;
+
+    scale = gtk_widget_get_scale_factor (GTK_WIDGET (sidebar));
+	icon_theme = gtk_icon_theme_get_default ();
+	icon_size = nemo_get_icon_size_for_stock_size (GTK_ICON_SIZE_MENU);
+	icon = g_themed_icon_new ("nemo-eject");
+	icon_info = gtk_icon_theme_lookup_by_gicon_for_scale (icon_theme, icon, icon_size, scale, 0);
+
+	style = gtk_widget_get_style_context (GTK_WIDGET (sidebar));
+	gtk_style_context_save (style);
+
+	if (icon_info != NULL) {
+		state = gtk_widget_get_state_flags (GTK_WIDGET (sidebar));
+		gtk_style_context_add_class (style, GTK_STYLE_CLASS_IMAGE);
+
+		if (highlighted) {
+			state |= GTK_STATE_FLAG_PRELIGHT;
+		}
+
+		gtk_style_context_set_state (style, state);
+
+		eject = gtk_icon_info_load_symbolic_for_context (icon_info,
+								 style,
+								 NULL,
+								 NULL);
+
+		g_object_unref (icon_info);
+	} else {
+		GtkIconSet *icon_set;
+
+		gtk_style_context_set_state (style, GTK_STATE_FLAG_NORMAL);
+		icon_set = gtk_style_context_lookup_icon_set (style, GTK_STOCK_MISSING_IMAGE);
+		eject = gtk_icon_set_render_icon_pixbuf (icon_set, style, GTK_ICON_SIZE_MENU);
+	}
+
+	gtk_style_context_restore (style);
+	g_object_unref (icon);
+
+	surface = gdk_cairo_surface_create_from_pixbuf (eject, scale, NULL);
+    g_object_unref (eject);
+    return surface;
+}
+
 static gboolean
 should_show_desktop (void)
 {
@@ -400,6 +457,7 @@ add_place (NemoPlacesSidebar *sidebar,
        GtkTreeIter cat_iter)
 {
 	GtkTreeIter           iter;
+	cairo_surface_t      *eject;
 	gboolean show_eject, show_unmount;
 	gboolean show_eject_button;
 
@@ -418,6 +476,12 @@ add_place (NemoPlacesSidebar *sidebar,
 		show_eject_button = (show_unmount || show_eject);
 	}
 
+	if (show_eject_button) {
+        eject = get_eject_icon (sidebar, FALSE);
+	} else {
+		eject = NULL;
+	}
+
 	gtk_tree_store_append (sidebar->store, &iter, &cat_iter);
 	gtk_tree_store_set (sidebar->store, &iter,
 			    PLACES_SIDEBAR_COLUMN_ICON, icon,
@@ -432,7 +496,7 @@ add_place (NemoPlacesSidebar *sidebar,
 			    PLACES_SIDEBAR_COLUMN_NO_EJECT, !show_eject_button,
 			    PLACES_SIDEBAR_COLUMN_BOOKMARK, place_type != PLACES_BOOKMARK,
 			    PLACES_SIDEBAR_COLUMN_TOOLTIP, tooltip,
-			    PLACES_SIDEBAR_COLUMN_EJECT_ICON, show_eject_button ? "media-eject-symbolic" : NULL,
+			    PLACES_SIDEBAR_COLUMN_EJECT_ICON, eject,
 			    PLACES_SIDEBAR_COLUMN_SECTION_TYPE, section_type,
                 PLACES_SIDEBAR_COLUMN_DF_PERCENT, df_percent,
                 PLACES_SIDEBAR_COLUMN_SHOW_DF, show_df_percent,
@@ -654,7 +718,7 @@ get_gicon (const gchar *uri)
 {
     NemoFile *file = nemo_file_get_by_uri (uri);
 
-    return nemo_file_get_control_icon (file);
+    return nemo_file_get_emblemed_icon (file, NEMO_FILE_ICON_FLAGS_NONE);
 }
 
 static void
@@ -784,7 +848,7 @@ update_places (NemoPlacesSidebar *sidebar)
 
     if (recent_is_supported ()) {
         mount_uri = (char *)"recent:///"; /* No need to strdup */
-        icon = g_themed_icon_new ("document-open-recent-symbolic");
+        icon = g_themed_icon_new ("folder-recent");
         cat_iter = add_place (sidebar, PLACES_BUILT_IN,
                               SECTION_COMPUTER,
                               _("Recent"), icon, mount_uri,
@@ -796,7 +860,7 @@ update_places (NemoPlacesSidebar *sidebar)
 
     /* file system root */
     mount_uri = (char *)"file:///"; /* No need to strdup */
-    icon = g_themed_icon_new (NEMO_ICON_SYMBOLIC_FILESYSTEM);
+    icon = g_themed_icon_new (NEMO_ICON_FILESYSTEM);
     full = get_disk_full (g_file_new_for_uri (mount_uri), &tooltip_info);
     tooltip = g_strdup_printf (_("Open the contents of the File System\n%s"), tooltip_info);
     g_free (tooltip_info);
@@ -814,7 +878,7 @@ update_places (NemoPlacesSidebar *sidebar)
         sidebar->bottom_bookend_uri = g_strdup (mount_uri);
 
     mount_uri = (char *)"trash:///"; /* No need to strdup */
-    icon = nemo_trash_monitor_get_symbolic_icon ();
+    icon = nemo_trash_monitor_get_icon ();
     cat_iter = add_place (sidebar, PLACES_BUILT_IN,
                            SECTION_COMPUTER,
                            _("Trash"), icon, mount_uri,
@@ -894,7 +958,7 @@ update_places (NemoPlacesSidebar *sidebar)
             }
         }
 
-        icon = nemo_get_mount_gicon (mount);
+        icon = g_mount_get_icon (mount);
         mount_uri = g_file_get_uri (root);
         name = g_mount_get_name (mount);
         tooltip = g_file_get_parse_name (root);
@@ -935,7 +999,7 @@ update_places (NemoPlacesSidebar *sidebar)
                 mount = g_volume_get_mount (volume);
                 if (mount != NULL) {
                     /* Show mounted volume in the sidebar */
-                    icon = nemo_get_mount_gicon (mount);
+                    icon = g_mount_get_icon (mount);
                     root = g_mount_get_default_location (mount);
                     mount_uri = g_file_get_uri (root);
                     name = g_mount_get_name (mount);
@@ -967,7 +1031,7 @@ update_places (NemoPlacesSidebar *sidebar)
                      * cue that the user should remember to yank out the media if
                      * he just unmounted it.
                      */
-                    icon = g_volume_get_symbolic_icon (volume);
+                    icon = g_volume_get_icon (volume);
                     name = g_volume_get_name (volume);
                     tooltip = g_strdup_printf (_("Mount and open %s (%s)"), name,
                                                g_volume_get_identifier (volume,
@@ -995,7 +1059,7 @@ update_places (NemoPlacesSidebar *sidebar)
                  * work.. but it's also for human beings who like to turn off media detection
                  * in the OS to save battery juice.
                  */
-                icon = g_drive_get_symbolic_icon (drive);
+                icon = g_drive_get_icon (drive);
                 name = g_drive_get_name (drive);
                 tooltip = g_strdup_printf (_("Mount and open %s"), name);
 
@@ -1035,7 +1099,7 @@ update_places (NemoPlacesSidebar *sidebar)
 
         mount = g_volume_get_mount (volume);
         if (mount != NULL) {
-            icon = nemo_get_mount_gicon (mount);
+            icon = g_mount_get_icon (mount);
             root = g_mount_get_default_location (mount);
             mount_uri = g_file_get_uri (root);
             full = get_disk_full (g_file_new_for_uri (mount_uri), &tooltip_info);
@@ -1057,7 +1121,7 @@ update_places (NemoPlacesSidebar *sidebar)
             g_free (mount_uri);
         } else {
             /* see comment above in why we add an icon for an unmounted mountable volume */
-            icon = g_volume_get_symbolic_icon (volume);
+            icon = g_volume_get_icon (volume);
             name = g_volume_get_name (volume);
             cat_iter = add_place (sidebar, PLACES_MOUNTED_VOLUME,
                                    SECTION_DEVICES,
@@ -1084,7 +1148,7 @@ update_places (NemoPlacesSidebar *sidebar)
 			network_mounts = g_list_prepend (network_mounts, mount);
 			continue;
 		} else {
-			icon = g_volume_get_symbolic_icon (volume);
+			icon = g_volume_get_icon (volume);
 			name = g_volume_get_name (volume);
 			tooltip = g_strdup_printf (_("Mount and open %s"), name);
 
@@ -1105,7 +1169,7 @@ update_places (NemoPlacesSidebar *sidebar)
 	for (l = network_mounts; l != NULL; l = l->next) {
 		mount = l->data;
 		root = g_mount_get_default_location (mount);
-		icon = nemo_get_mount_gicon (mount);
+		icon = g_mount_get_icon (mount);
 		mount_uri = g_file_get_uri (root);
 		name = g_mount_get_name (mount);
 		tooltip = g_file_get_parse_name (root);
@@ -1125,7 +1189,7 @@ update_places (NemoPlacesSidebar *sidebar)
 
 	/* network:// */
  	mount_uri = (char *)"network:///"; /* No need to strdup */
-	icon = g_themed_icon_new (NEMO_ICON_SYMBOLIC_NETWORK);
+	icon = g_themed_icon_new (NEMO_ICON_NETWORK);
 	cat_iter = add_place (sidebar, PLACES_BUILT_IN,
                 		   SECTION_NETWORK,
                 		   _("Network"), icon,
@@ -3508,6 +3572,113 @@ bookmarks_button_release_event_cb (GtkWidget *widget,
 	return FALSE;
 }
 
+static void
+update_eject_buttons (NemoPlacesSidebar *sidebar,
+		      GtkTreePath 	    *path)
+{
+	GtkTreeIter iter, store_iter;
+	gboolean icon_visible, path_same;
+
+	icon_visible = TRUE;
+
+	if (path == NULL && sidebar->eject_highlight_path == NULL) {
+		/* Both are null - highlight up to date */
+		return;
+	}
+
+	path_same = (path != NULL) &&
+		(sidebar->eject_highlight_path != NULL) &&
+		(gtk_tree_path_compare (sidebar->eject_highlight_path, path) == 0);
+
+	if (path_same) {
+		/* Same path - highlight up to date */
+		return;
+	}
+
+	if (path) {
+		gtk_tree_model_get_iter (GTK_TREE_MODEL (sidebar->store_filter),
+					 &iter,
+					 path);
+
+		gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store_filter),
+				    &iter,
+				    PLACES_SIDEBAR_COLUMN_EJECT, &icon_visible,
+				    -1);
+	}
+
+	if (!icon_visible || path == NULL || !path_same) {
+		/* remove highlighting and reset the saved path, as we are leaving
+		 * an eject button area.
+		 */
+		if (sidebar->eject_highlight_path) {
+			gtk_tree_model_get_iter (GTK_TREE_MODEL (sidebar->store_filter),
+						 &iter,
+						 sidebar->eject_highlight_path);
+
+            gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (sidebar->store_filter),
+                                                              &store_iter,
+                                                              &iter);
+
+            gtk_tree_store_set (sidebar->store,
+                                &store_iter,
+                                PLACES_SIDEBAR_COLUMN_EJECT_ICON, get_eject_icon (sidebar, FALSE),
+                                -1);
+
+			gtk_tree_path_free (sidebar->eject_highlight_path);
+			sidebar->eject_highlight_path = NULL;
+		}
+
+		if (!icon_visible) {
+			return;
+		}
+	}
+
+	if (path != NULL) {
+		/* add highlighting to the selected path, as the icon is visible and
+		 * we're hovering it.
+		 */
+		gtk_tree_model_get_iter (GTK_TREE_MODEL (sidebar->store_filter),
+					 &iter,
+					 path);
+
+        gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (sidebar->store_filter),
+                                                          &store_iter,
+                                                          &iter);
+
+        gtk_tree_store_set (sidebar->store,
+                            &store_iter,
+                            PLACES_SIDEBAR_COLUMN_EJECT_ICON, get_eject_icon (sidebar, TRUE),
+                            -1);
+
+		sidebar->eject_highlight_path = gtk_tree_path_copy (path);
+	}
+}
+
+static gboolean
+bookmarks_motion_event_cb (GtkWidget             *widget,
+			   GdkEventMotion        *event,
+			   NemoPlacesSidebar *sidebar)
+{
+	GtkTreePath *path;
+
+	path = NULL;
+
+	if (over_eject_button (sidebar, event->x, event->y, &path)) {
+		update_eject_buttons (sidebar, path);
+		gtk_tree_path_free (path);
+
+		return TRUE;
+	}
+
+	update_eject_buttons (sidebar, NULL);
+
+	return FALSE;
+}
+
+/* Callback used when a button is pressed on the shortcuts list.
+ * We trap button 3 to bring up a popup menu, and button 2 to
+ * open in a new tab.
+ */
 static gboolean
 bookmarks_button_press_event_cb (GtkWidget             *widget,
 				 GdkEventButton        *event,
@@ -3899,7 +4070,7 @@ nemo_places_sidebar_init (NemoPlacesSidebar *sidebar)
 	g_object_set (cell,
 		      "weight", PANGO_WEIGHT_BOLD,
 		      "weight-set", TRUE,
-		      "ypad", 0,
+		      "ypad", 6,
 		      "xpad", 0,
 		      NULL);
 	gtk_tree_view_column_set_cell_data_func (col, cell,
@@ -3950,7 +4121,7 @@ nemo_places_sidebar_init (NemoPlacesSidebar *sidebar)
 	gtk_tree_view_column_pack_start (eject_col, cell, FALSE);
 	gtk_tree_view_column_set_attributes (eject_col, cell,
 					     "visible", PLACES_SIDEBAR_COLUMN_EJECT,
-					     "icon-name", PLACES_SIDEBAR_COLUMN_EJECT_ICON,
+					     "surface", PLACES_SIDEBAR_COLUMN_EJECT_ICON,
 					     NULL);
 
 	/* normal text renderer */
@@ -4067,6 +4238,8 @@ nemo_places_sidebar_init (NemoPlacesSidebar *sidebar)
 			  G_CALLBACK (bookmarks_popup_menu_cb), sidebar);
 	g_signal_connect (tree_view, "button-press-event",
 			  G_CALLBACK (bookmarks_button_press_event_cb), sidebar);
+	g_signal_connect (tree_view, "motion-notify-event",
+			  G_CALLBACK (bookmarks_motion_event_cb), sidebar);
 	g_signal_connect (tree_view, "button-release-event",
 			  G_CALLBACK (bookmarks_button_release_event_cb), sidebar);
     g_signal_connect (tree_view, "row-expanded",
@@ -4110,6 +4283,11 @@ nemo_places_sidebar_dispose (GObject *object)
 	free_drag_data (sidebar);
     g_clear_object (&sidebar->unmount_notify);
 
+	if (sidebar->eject_highlight_path != NULL) {
+		gtk_tree_path_free (sidebar->eject_highlight_path);
+		sidebar->eject_highlight_path = NULL;
+	}
+
 	if (sidebar->bookmarks_changed_id != 0) {
 		g_signal_handler_disconnect (sidebar->bookmarks,
 					     sidebar->bookmarks_changed_id);
@@ -4355,7 +4533,7 @@ nemo_shortcuts_model_new (NemoPlacesSidebar *sidebar)
 		G_TYPE_BOOLEAN,
 		G_TYPE_BOOLEAN,
 		G_TYPE_STRING,
-		G_TYPE_STRING,
+		CAIRO_GOBJECT_TYPE_SURFACE,
 		G_TYPE_INT,
 		G_TYPE_STRING,
         G_TYPE_INT,
diff --git a/src/nemo-tree-sidebar-model.c b/src/nemo-tree-sidebar-model.c
index d401659..3830443 100644
--- a/src/nemo-tree-sidebar-model.c
+++ b/src/nemo-tree-sidebar-model.c
@@ -298,14 +298,16 @@ get_menu_icon_for_file (TreeNode *node,
 	/* pick only the first emblem we can render for the tree view */
 	for (l = emblem_icons; l != NULL; l = l->next) {
 		emblem_icon = l->data;
-		emblem = g_emblem_new (emblem_icon);
-		emblemed_icon = g_emblemed_icon_new (gicon, emblem);
+		if (nemo_icon_theme_can_render (G_THEMED_ICON (emblem_icon))) {
+			emblem = g_emblem_new (emblem_icon);
+			emblemed_icon = g_emblemed_icon_new (gicon, emblem);
 
-		g_object_unref (gicon);
-		g_object_unref (emblem);
-		gicon = emblemed_icon;
+			g_object_unref (gicon);
+			g_object_unref (emblem);
+			gicon = emblemed_icon;
 
-		break;
+			break;
+		}
 	}
 
 	g_list_free_full (emblem_icons, g_object_unref);
diff --git a/src/nemo-tree-sidebar.c b/src/nemo-tree-sidebar.c
index b5f622f..8be4363 100644
--- a/src/nemo-tree-sidebar.c
+++ b/src/nemo-tree-sidebar.c
@@ -1337,7 +1337,7 @@ create_popup_menu (FMTreeView *view)
 	eel_gtk_menu_append_separator (GTK_MENU (popup));
 	
 	/* add the "move to trash" menu item */
-	menu_image = gtk_image_new_from_icon_name (NEMO_ICON_SYMBOLIC_TRASH_FULL,
+	menu_image = gtk_image_new_from_icon_name (NEMO_ICON_TRASH_FULL,
 						   GTK_ICON_SIZE_MENU);
 	gtk_widget_show (menu_image);
 	menu_item = gtk_image_menu_item_new_with_mnemonic (_("Mo_ve to Trash"));
diff --git a/src/nemo-view.c b/src/nemo-view.c
index 1a965ad..b58d663 100644
--- a/src/nemo-view.c
+++ b/src/nemo-view.c
@@ -5149,6 +5149,7 @@ add_place_to_action (NemoView *view, const gchar *bookmark_name, GIcon *icon, gc
                                             view);
 }
 
+
 static void
 reset_move_copy_to_menu (NemoView *view)
 {
@@ -5184,9 +5185,9 @@ reset_move_copy_to_menu (NemoView *view)
     g_free (mount_uri);
 
     action = gtk_action_group_get_action (view->details->dir_action_group, NEMO_ACTION_COPY_TO_HOME);
-    gtk_action_set_gicon (action, nemo_file_get_control_icon (file));
+    gtk_action_set_gicon (action, nemo_file_get_emblemed_icon (file, NEMO_FILE_ICON_FLAGS_NONE));
     action = gtk_action_group_get_action (view->details->dir_action_group, NEMO_ACTION_MOVE_TO_HOME);
-    gtk_action_set_gicon (action, nemo_file_get_control_icon (file));
+    gtk_action_set_gicon (action, nemo_file_get_emblemed_icon (file, NEMO_FILE_ICON_FLAGS_NONE));
 
     g_object_unref (file);
     mount_uri = nemo_get_desktop_directory_uri ();
@@ -5194,9 +5195,9 @@ reset_move_copy_to_menu (NemoView *view)
     g_free (mount_uri);
 
     action = gtk_action_group_get_action (view->details->dir_action_group, NEMO_ACTION_COPY_TO_DESKTOP);
-    gtk_action_set_gicon (action, nemo_file_get_control_icon (file));
+    gtk_action_set_gicon (action, nemo_file_get_emblemed_icon (file, NEMO_FILE_ICON_FLAGS_NONE));
     action = gtk_action_group_get_action (view->details->dir_action_group, NEMO_ACTION_MOVE_TO_DESKTOP);
-    gtk_action_set_gicon (action, nemo_file_get_control_icon (file));
+    gtk_action_set_gicon (action, nemo_file_get_emblemed_icon (file, NEMO_FILE_ICON_FLAGS_NONE));
 
     g_object_unref (file);
 
@@ -5291,7 +5292,7 @@ reset_move_copy_to_menu (NemoView *view)
                 }
             }
 
-            icon = nemo_get_mount_gicon (mount);
+            icon = g_mount_get_icon (mount);
             mount_uri = g_file_get_uri (root);
             name = g_mount_get_name (mount);
 
@@ -5333,7 +5334,7 @@ reset_move_copy_to_menu (NemoView *view)
                     mount = g_volume_get_mount (volume);
                     if (mount != NULL) {
                         /* Show mounted volume in the sidebar */
-                        icon = nemo_get_mount_gicon (mount);
+                        icon = g_mount_get_icon (mount);
                         root = g_mount_get_default_location (mount);
                         mount_uri = g_file_get_uri (root);
                         name = g_mount_get_name (mount);
@@ -5381,7 +5382,7 @@ reset_move_copy_to_menu (NemoView *view)
 
             mount = g_volume_get_mount (volume);
             if (mount != NULL) {
-                icon = nemo_get_mount_gicon (mount);
+                icon = g_mount_get_icon (mount);
                 root = g_mount_get_default_location (mount);
                 mount_uri = g_file_get_uri (root);
 
@@ -5422,7 +5423,7 @@ reset_move_copy_to_menu (NemoView *view)
         for (l = network_mounts; l != NULL; l = l->next) {
             mount = l->data;
             root = g_mount_get_default_location (mount);
-            icon = nemo_get_mount_gicon (mount);
+            icon = g_mount_get_icon (mount);
             mount_uri = g_file_get_uri (root);
             name = g_mount_get_name (mount);
 
@@ -5608,6 +5609,7 @@ add_extension_action_for_files (NemoView *view,
 	gboolean sensitive, priority;
     gboolean separator;
 	GtkAction *action;
+	GdkPixbuf *pixbuf;
     GtkWidget *widget_a, *widget_b;
 	ExtensionActionCallbackData *data;
 
@@ -5627,15 +5629,11 @@ add_extension_action_for_files (NemoView *view,
                                  tip,
                                  NULL);
         if (icon != NULL) {
-            GIcon *gicon;
-
-            if (g_str_has_suffix (icon, "-symbolic")) {
-                gicon = g_themed_icon_new (icon);
-            } else {
-                gicon = NULL;
+            pixbuf = nemo_ui_get_menu_icon (icon, GTK_WIDGET (view));
+            if (pixbuf != NULL) {
+                gtk_action_set_gicon (action, G_ICON (pixbuf));
+                g_object_unref (pixbuf);
             }
-
-            gtk_action_set_gicon (action, gicon);
         }
     } else if (separator) {
         action = nemo_separator_action_new (name);
@@ -8319,15 +8317,15 @@ static const GtkActionEntry directory_view_entries[] = {
   /* label, accelerator */       N_("Connect To This Server"), NULL,
   /* tooltip */                  N_("Make a permanent connection to this server"),
 				 G_CALLBACK (action_connect_to_server_link_callback) },
-  /* name, stock id */         { "Mount Volume", "media-mount-symbolic",
+  /* name, stock id */         { "Mount Volume", NULL,
   /* label, accelerator */       N_("_Mount"), NULL,
   /* tooltip */                  N_("Mount the selected volume"),
 				 G_CALLBACK (action_mount_volume_callback) },
-  /* name, stock id */         { "Unmount Volume", "media-eject-symbolic",
+  /* name, stock id */         { "Unmount Volume", NULL,
   /* label, accelerator */       N_("_Unmount"), NULL,
   /* tooltip */                  N_("Unmount the selected volume"),
 				 G_CALLBACK (action_unmount_volume_callback) },
-  /* name, stock id */         { "Eject Volume", "media-eject-symbolic",
+  /* name, stock id */         { "Eject Volume", NULL,
   /* label, accelerator */       N_("_Eject"), NULL,
   /* tooltip */                  N_("Eject the selected volume"),
 				 G_CALLBACK (action_eject_volume_callback) },
@@ -8343,15 +8341,15 @@ static const GtkActionEntry directory_view_entries[] = {
   /* label, accelerator */       N_("_Detect Media"), NULL,
   /* tooltip */                  N_("Detect media in the selected drive"),
 				 G_CALLBACK (action_detect_media_callback) },
-  /* name, stock id */         { "Self Mount Volume", "media-mount-symbolic",
+  /* name, stock id */         { "Self Mount Volume", NULL,
   /* label, accelerator */       N_("_Mount"), NULL,
   /* tooltip */                  N_("Mount the volume associated with the open folder"),
 				 G_CALLBACK (action_self_mount_volume_callback) },
-  /* name, stock id */         { "Self Unmount Volume", "media-eject-symbolic",
+  /* name, stock id */         { "Self Unmount Volume", NULL,
   /* label, accelerator */       N_("_Unmount"), NULL,
   /* tooltip */                  N_("Unmount the volume associated with the open folder"),
 				 G_CALLBACK (action_self_unmount_volume_callback) },
-  /* name, stock id */         { "Self Eject Volume", "media-eject-symbolic",
+  /* name, stock id */         { "Self Eject Volume", NULL,
   /* label, accelerator */       N_("_Eject"), NULL,
   /* tooltip */                  N_("Eject the volume associated with the open folder"),
 				 G_CALLBACK (action_self_eject_volume_callback) },
@@ -8415,15 +8413,15 @@ static const GtkActionEntry directory_view_entries[] = {
   /* label, accelerator */       N_("_Restore"), NULL, NULL,
 				 G_CALLBACK (action_location_restore_from_trash_callback) },
 
-  /* name, stock id */         { "Location Mount Volume", "media-mount-symbolic",
+  /* name, stock id */         { "Location Mount Volume", NULL,
   /* label, accelerator */       N_("_Mount"), NULL,
   /* tooltip */                  N_("Mount the volume associated with this folder"),
 				 G_CALLBACK (action_location_mount_volume_callback) },
-  /* name, stock id */         { "Location Unmount Volume", "media-eject-symbolic",
+  /* name, stock id */         { "Location Unmount Volume", NULL,
   /* label, accelerator */       N_("_Unmount"), NULL,
   /* tooltip */                  N_("Unmount the volume associated with this folder"),
 				 G_CALLBACK (action_location_unmount_volume_callback) },
-  /* name, stock id */         { "Location Eject Volume", "media-eject-symbolic",
+  /* name, stock id */         { "Location Eject Volume", NULL,
   /* label, accelerator */       N_("_Eject"), NULL,
   /* tooltip */                  N_("Eject the volume associated with this folder"),
 				 G_CALLBACK (action_location_eject_volume_callback) },
@@ -8467,11 +8465,11 @@ static const GtkActionEntry directory_view_entries[] = {
 				N_("_Desktop"), NULL,
 				N_("Move the current selection to the desktop"),
 				G_CALLBACK (action_move_to_desktop_callback) },
-                               {NEMO_ACTION_BROWSE_MOVE_TO, "document-open-symbolic",
+                               {NEMO_ACTION_BROWSE_MOVE_TO, GTK_STOCK_DIRECTORY,
                 N_("Browse…"), NULL,
                 N_("Browse for a folder to move the selection to"),
                 G_CALLBACK (action_browse_for_move_to_folder_callback) },
-                               {NEMO_ACTION_BROWSE_COPY_TO, "document-open-symbolic",
+                               {NEMO_ACTION_BROWSE_COPY_TO, GTK_STOCK_DIRECTORY,
                 N_("Browse…"), NULL,
                 N_("Browse for a folder to copy the selection to"),
                 G_CALLBACK (action_browse_for_copy_to_folder_callback) }
@@ -9469,7 +9467,7 @@ real_update_location_menu (NemoView *view)
 		      "tooltip", tip,
 		      "icon-name", (file != NULL &&
 				    nemo_file_is_in_trash (file)) ?
-		      NEMO_ICON_DELETE : NEMO_ICON_SYMBOLIC_TRASH_FULL,
+		      NEMO_ICON_DELETE : NEMO_ICON_TRASH_FULL,
 		      NULL);
 	gtk_action_set_sensitive (action, can_delete_file);
 	gtk_action_set_visible (action, show_delete);
@@ -9806,7 +9804,7 @@ real_update_menus (NemoView *view)
 		      "label", label,
 		      "tooltip", tip,
 		      "icon-name", all_selected_items_in_trash (view) ?
-		      NEMO_ICON_DELETE : NEMO_ICON_SYMBOLIC_TRASH_FULL,
+		      NEMO_ICON_DELETE : NEMO_ICON_TRASH_FULL,
 		      NULL);
 	gtk_action_set_sensitive (action, can_delete_files);
 
diff --git a/src/nemo-window-bookmarks.c b/src/nemo-window-bookmarks.c
index ee39c80..054e8cd 100644
--- a/src/nemo-window-bookmarks.c
+++ b/src/nemo-window-bookmarks.c
@@ -335,6 +335,8 @@ nemo_menus_append_bookmark_to_menu (NemoWindow *window,
 	path = g_strdup_printf ("%s/%s", parent_path, action_name);
 	menuitem = gtk_ui_manager_get_widget (window->details->ui_manager,
 					      path);
+	gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menuitem),
+						   TRUE);
 
 	g_free (path);
 }
diff --git a/src/nemo-window-menus.c b/src/nemo-window-menus.c
index 5fb3259..7b0533d 100644
--- a/src/nemo-window-menus.c
+++ b/src/nemo-window-menus.c
@@ -460,7 +460,7 @@ trash_state_changed_cb (NemoTrashMonitor *monitor,
 	action_group = nemo_window_get_main_action_group (window);
 	action = gtk_action_group_get_action (action_group, "Go to Trash");
 
-	gicon = nemo_trash_monitor_get_symbolic_icon ();
+	gicon = nemo_trash_monitor_get_icon ();
 
 	if (gicon) {
 		g_object_set (action, "gicon", gicon, NULL);
@@ -769,6 +769,32 @@ static const char* icon_entries[] = {
 	"/MenuBar/Other Menus/Go/Edit Location"
 };
 
+/**
+ * refresh_go_menu:
+ *
+ * Refresh list of bookmarks at end of Go menu to match centralized history list.
+ * @window: The NemoWindow whose Go menu will be refreshed.
+ **/
+static void
+nemo_window_initialize_go_menu (NemoWindow *window)
+{
+	GtkUIManager *ui_manager;
+	GtkWidget *menuitem;
+	guint i;
+
+	ui_manager = nemo_window_get_ui_manager (NEMO_WINDOW (window));
+
+	for (i = 0; i < G_N_ELEMENTS (icon_entries); i++) {
+		menuitem = gtk_ui_manager_get_widget (
+				ui_manager,
+				icon_entries[i]);
+		if (menuitem) {
+			gtk_image_menu_item_set_always_show_image (
+					GTK_IMAGE_MENU_ITEM (menuitem), TRUE);
+		}
+	}
+}
+
 static void
 action_new_window_callback (GtkAction *action,
                             gpointer user_data)
@@ -1252,23 +1278,23 @@ static const GtkActionEntry main_entries[] = {
   /* label, accelerator */       N_("Connect to _Server..."), NULL,
   /* tooltip */                  N_("Connect to a remote computer or shared disk"),
                                  G_CALLBACK (action_connect_to_server_callback) },
-  /* name, stock id */         { "Home", NEMO_ICON_SYMBOLIC_HOME,
+  /* name, stock id */         { "Home", NEMO_ICON_HOME,
   /* label, accelerator */       N_("_Home"), "<alt>Home",
   /* tooltip */                  N_("Open your personal folder"),
                                  G_CALLBACK (action_home_callback) },
-  /* name, stock id */         { "Go to Computer", NEMO_ICON_SYMBOLIC_COMPUTER,
+  /* name, stock id */         { "Go to Computer", NEMO_ICON_COMPUTER,
   /* label, accelerator */       N_("_Computer"), NULL,
   /* tooltip */                  N_("Browse all local and remote disks and folders accessible from this computer"),
                                  G_CALLBACK (action_go_to_computer_callback) },
-  /* name, stock id */         { "Go to Network", NEMO_ICON_SYMBOLIC_NETWORK,
+  /* name, stock id */         { "Go to Network", NEMO_ICON_NETWORK,
   /* label, accelerator */       N_("_Network"), NULL,
   /* tooltip */                  N_("Browse bookmarked and local network locations"),
                                  G_CALLBACK (action_go_to_network_callback) },
-  /* name, stock id */         { "Go to Templates", NEMO_ICON_SYMBOLIC_FOLDER_TEMPLATES,
+  /* name, stock id */         { "Go to Templates", NEMO_ICON_TEMPLATE,
   /* label, accelerator */       N_("T_emplates"), NULL,
   /* tooltip */                  N_("Open your personal templates folder"),
                                  G_CALLBACK (action_go_to_templates_callback) },
-  /* name, stock id */         { "Go to Trash", NEMO_ICON_SYMBOLIC_TRASH,
+  /* name, stock id */         { "Go to Trash", NEMO_ICON_TRASH,
   /* label, accelerator */       N_("_Trash"), NULL,
   /* tooltip */                  N_("Open your personal trash folder"),
                                  G_CALLBACK (action_go_to_trash_callback) },
@@ -1503,7 +1529,7 @@ nemo_window_create_toolbar_action_group (NemoWindow *window)
     gtk_action_group_add_action (action_group, GTK_ACTION (action));
     g_signal_connect (action, "activate",
                       G_CALLBACK (action_new_folder_callback), window);
-    gtk_action_set_icon_name (GTK_ACTION (action), "folder-new-symbolic");
+    gtk_action_set_icon_name (GTK_ACTION (action), "folder-symbolic");
     g_object_unref (action);
 
     action = GTK_ACTION (gtk_action_new (NEMO_ACTION_OPEN_IN_TERMINAL,
@@ -1732,6 +1758,7 @@ nemo_window_initialize_menus (NemoWindow *window)
 	gtk_ui_manager_add_ui_from_resource (ui_manager, "/org/nemo/nemo-shell-ui.xml", NULL);
 
 	nemo_window_initialize_trash_icon_monitor (window);
+	nemo_window_initialize_go_menu (window);
 }
 
 void

Offline

#16 2018-08-15 20:37:41

BurhanDanger
Member
From: Sylhet, Bangladesh.
Registered: 2016-09-13
Posts: 29

Re: cinnamon - disable monochrome icons

Thanks for the diff. Your version isn't aesthetically identical to 3.6.5. Theme in question here is Victory icon theme

Last edited by jasonwryan (2018-08-15 20:48:21)

Offline

#17 2018-08-15 20:48:33

jasonwryan
Anarchist
From: .nz
Registered: 2009-05-09
Posts: 30,424
Website

Re: cinnamon - disable monochrome icons

Read the Code of Conduct and only post thumbnails http://wiki.archlinux.org/index.php/Cod … s_and_code


Arch + dwm   •   Mercurial repos  •   Surfraw

Registered Linux User #482438

Offline

#18 2018-08-15 21:05:28

loqs
Member
Registered: 2014-03-06
Posts: 17,371

Re: cinnamon - disable monochrome icons

@BurhanDanger the sidebar icons on nemo are still symbolic or is it some other element?

Offline

#19 2018-08-16 06:05:41

BurhanDanger
Member
From: Sylhet, Bangladesh.
Registered: 2016-09-13
Posts: 29

Re: cinnamon - disable monochrome icons

Sidebar is not symbolic but some other places symbolic icons used whereas in 3.6.5 were not .


3.8.5 -> nemo_3_8_5_Edited.png3.6.5 -> nemo_3_6_5.png3.8.0-loqs -> nemo_3_8_0_loqs.png

Offline

#20 2018-08-16 06:09:23

BurhanDanger
Member
From: Sylhet, Bangladesh.
Registered: 2016-09-13
Posts: 29

Re: cinnamon - disable monochrome icons

@jasonwryan, I think it'd be helpful if there's a mention of this rule in https://bbs.archlinux.org/help.php#url

Offline

#21 2018-08-16 14:19:16

loqs
Member
Registered: 2014-03-06
Posts: 17,371

Re: cinnamon - disable monochrome icons

Offline

#22 2018-08-17 07:59:06

BurhanDanger
Member
From: Sylhet, Bangladesh.
Registered: 2016-09-13
Posts: 29

Re: cinnamon - disable monochrome icons

Looks like it. I'm just going to use upstream

Offline

#23 2018-08-19 14:31:57

eschwartz
Fellow
Registered: 2014-08-08
Posts: 4,097

Re: cinnamon - disable monochrome icons

Eschwartz wrote:

I'm super confused here. Surely if the symbolic icons are things someone dislikes, they would dislike it everywhere and not just in nemo... so it would make sense to invest the time in creating an icon theme which they find comfortable. Why mess around with forking one program?

Last edited by eschwartz (2018-08-19 14:32:07)


Managing AUR repos The Right Way -- aurpublish (now a standalone tool)

Offline

#24 2018-08-19 14:49:17

loqs
Member
Registered: 2014-03-06
Posts: 17,371

Re: cinnamon - disable monochrome icons

@Eschwartz if that was directed at me I thought I clarified in #7 and #11

Offline

#25 2018-08-19 14:51:02

eschwartz
Fellow
Registered: 2014-08-08
Posts: 4,097

Re: cinnamon - disable monochrome icons

It is not... it is directed at the recent newcomer to this thread, who I hope will see logic. smile


Managing AUR repos The Right Way -- aurpublish (now a standalone tool)

Offline

Board footer

Powered by FluxBB