diff --git a/icons/CMakeLists.txt b/icons/CMakeLists.txt index 080319e8..b14903d4 100644 --- a/icons/CMakeLists.txt +++ b/icons/CMakeLists.txt @@ -27,13 +27,13 @@ set(ICON_FILES install(FILES ${ICON_FILES} DESTINATION ${ICONS_DEST}) # Application icon goes in theme directory -install(FILES "16x16/geary.png" DESTINATION share/icons/hicolor/16x16/apps) -install(FILES "24x24/geary.png" DESTINATION share/icons/hicolor/24x24/apps) -install(FILES "32x32/geary.png" DESTINATION share/icons/hicolor/32x32/apps) -install(FILES "48x48/geary.png" DESTINATION share/icons/hicolor/48x48/apps) -install(FILES "256x256/geary.png" DESTINATION share/icons/hicolor/256x256/apps) -install(FILES "512x512/geary.png" DESTINATION share/icons/hicolor/512x512/apps) -install(FILES "geary-symbolic.svg" DESTINATION share/icons/hicolor/symbolic/apps) +install(FILES "hicolor/16x16/apps/geary.png" DESTINATION share/icons/hicolor/16x16/apps) +install(FILES "hicolor/24x24/apps/geary.png" DESTINATION share/icons/hicolor/24x24/apps) +install(FILES "hicolor/32x32/apps/geary.png" DESTINATION share/icons/hicolor/32x32/apps) +install(FILES "hicolor/48x48/apps/geary.png" DESTINATION share/icons/hicolor/48x48/apps) +install(FILES "hicolor/256x256/apps/geary.png" DESTINATION share/icons/hicolor/256x256/apps) +install(FILES "hicolor/512x512/apps/geary.png" DESTINATION share/icons/hicolor/512x512/apps) +install(FILES "hicolor/symbolic/apps/geary-symbolic.svg" DESTINATION share/icons/hicolor/symbolic/apps) # Optional: update icon cache at install time. if (ICON_UPDATE) diff --git a/icons/16x16/geary.png b/icons/hicolor/16x16/apps/geary.png similarity index 100% rename from icons/16x16/geary.png rename to icons/hicolor/16x16/apps/geary.png diff --git a/icons/24x24/geary.png b/icons/hicolor/24x24/apps/geary.png similarity index 100% rename from icons/24x24/geary.png rename to icons/hicolor/24x24/apps/geary.png diff --git a/icons/256x256/geary.png b/icons/hicolor/256x256/apps/geary.png similarity index 100% rename from icons/256x256/geary.png rename to icons/hicolor/256x256/apps/geary.png diff --git a/icons/32x32/geary.png b/icons/hicolor/32x32/apps/geary.png similarity index 100% rename from icons/32x32/geary.png rename to icons/hicolor/32x32/apps/geary.png diff --git a/icons/48x48/geary.png b/icons/hicolor/48x48/apps/geary.png similarity index 100% rename from icons/48x48/geary.png rename to icons/hicolor/48x48/apps/geary.png diff --git a/icons/512x512/geary.png b/icons/hicolor/512x512/apps/geary.png similarity index 100% rename from icons/512x512/geary.png rename to icons/hicolor/512x512/apps/geary.png diff --git a/icons/geary-symbolic.svg b/icons/hicolor/symbolic/apps/geary-symbolic.svg similarity index 100% rename from icons/geary-symbolic.svg rename to icons/hicolor/symbolic/apps/geary-symbolic.svg diff --git a/src/client/application/geary-controller.vala b/src/client/application/geary-controller.vala index cb192487..be948608 100644 --- a/src/client/application/geary-controller.vala +++ b/src/client/application/geary-controller.vala @@ -174,10 +174,14 @@ public class GearyController : Geary.BaseObject { * Starts the controller and brings up Geary. */ public async void open_async() { - // This initializes the IconFactory, important to do before the actions are created (as they - // refer to some of Geary's custom icons) + // This initializes the IconFactory, important to do before + // the actions are created (as they refer to some of Geary's + // custom icons) IconFactory.instance.init(); - + + // Ensure all geary windows have an icon + Gtk.Window.set_default_icon_name("geary"); + // Setup actions. setup_actions(); GearyApplication.instance.load_ui_resource("accelerators.ui"); @@ -1709,6 +1713,7 @@ public class GearyController : Geary.BaseObject { "authors", GearyApplication.AUTHORS, "copyright", GearyApplication.COPYRIGHT, "license-type", Gtk.License.LGPL_2_1, + "logo-icon-name", "geary", "version", GearyApplication.VERSION, "website", GearyApplication.WEBSITE, "website-label", GearyApplication.WEBSITE_LABEL, @@ -1718,7 +1723,7 @@ public class GearyController : Geary.BaseObject { "translator-credits", _("translator-credits") ); } - + private void on_donate() { try { Gtk.show_uri(null, GearyApplication.DONATE, Gdk.CURRENT_TIME); diff --git a/src/client/components/icon-factory.vala b/src/client/components/icon-factory.vala index 1dd53d43..9505e576 100644 --- a/src/client/components/icon-factory.vala +++ b/src/client/components/icon-factory.vala @@ -20,10 +20,7 @@ public class IconFactory { private set { _instance = value; } } - - public const int APPLICATION_ICON_SIZE = 128; - public Gdk.Pixbuf application_icon { get; private set; } - + public const int UNREAD_ICON_SIZE = 16; public const int STAR_ICON_SIZE = 16; @@ -33,19 +30,11 @@ public class IconFactory { // Creates the icon factory. private IconFactory() { - icon_theme = Gtk.IconTheme.get_default(); icons_dir = GearyApplication.instance.get_resource_directory().get_child("icons"); - - append_icons_search_path(null); - append_icons_search_path("128x128"); - append_icons_search_path("48x48"); - append_icons_search_path("24x24"); - append_icons_search_path("16x16"); - - // Load icons here. - application_icon = load("geary", APPLICATION_ICON_SIZE); + icon_theme = Gtk.IconTheme.get_default(); + icon_theme.append_search_path(icons_dir.get_path()); } - + public void init() { // perform any additional initialization here; at this time, everything is done in the // constructor @@ -79,32 +68,7 @@ public class IconFactory { return new FileIcon(icon_file); } - - private void append_icons_search_path(string? name) { - if (Geary.String.is_empty(name)) - icon_theme.append_search_path(icons_dir.get_path()); - else - icon_theme.append_search_path(icons_dir.get_child(name).get_path()); - } - - private Gdk.Pixbuf? load(string icon_name, int size, Gtk.IconLookupFlags flags = 0) { - // Try looking up IconInfo (to report path in case of error) then load image - Gtk.IconInfo? icon_info = icon_theme.lookup_icon(icon_name, size, flags); - if (icon_info != null) { - try { - return icon_info.load_icon(); - } catch (Error err) { - warning("Couldn't load icon %s at %s, falling back to image-missing: %s", icon_name, - icon_info.get_filename(), err.message); - } - } else { - debug("Unable to lookup icon %s, falling back to image-missing...", icon_name); - } - - // Default: missing image icon. - return get_missing_icon(size, flags); - } - + // Attempts to load and return the missing image icon. private Gdk.Pixbuf? get_missing_icon(int size, Gtk.IconLookupFlags flags = 0) { try { diff --git a/src/client/components/main-window.vala b/src/client/components/main-window.vala index 3fb763ab..d92bc276 100644 --- a/src/client/components/main-window.vala +++ b/src/client/components/main-window.vala @@ -63,14 +63,7 @@ public class MainWindow : Gtk.ApplicationWindow { spinner.set_progress_monitor(progress_monitor); progress_monitor.add(conversation_list_store.preview_monitor); - - GLib.List pixbuf_list = new GLib.List(); - pixbuf_list.append(IconFactory.instance.application_icon); - // Use copy() because set_default_icon_list() actually accepts an owned reference - // If we didn't hold the pixbufs in memory, would need to use copy_deep() - // See https://mail.gnome.org/archives/vala-list/2014-August/msg00022.html - set_default_icon_list(pixbuf_list.copy()); - + delete_event.connect(on_delete_event); key_press_event.connect(on_key_press_event); key_release_event.connect(on_key_release_event); diff --git a/src/client/notification/libnotify.vala b/src/client/notification/libnotify.vala index 212fb942..97fb5174 100644 --- a/src/client/notification/libnotify.vala +++ b/src/client/notification/libnotify.vala @@ -196,11 +196,10 @@ public class Libnotify : Geary.BaseObject { // but it means in the future, a more robust system will be needed.) if (error_notification != null) return; - - error_notification = issue_notification("email", summary, body, - IconFactory.instance.application_icon, null); + + error_notification = issue_notification("email", summary, body, null, null); } - + public void clear_error_notification() { if (error_notification != null) { try {