diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 7 | ||||
-rw-r--r-- | src/deamon.vala | 1 | ||||
-rw-r--r-- | src/gui/aboutWindow.vala | 2 | ||||
-rw-r--r-- | src/gui/iconSelectWindow.vala | 45 | ||||
-rw-r--r-- | src/gui/newSliceWindow.vala | 9 | ||||
-rw-r--r-- | src/gui/preferencesWindow.vala | 10 | ||||
-rw-r--r-- | src/images/renderedText.vala | 52 | ||||
-rw-r--r-- | src/pies/pieManager.vala | 4 |
8 files changed, 50 insertions, 80 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b809c48..91ed3ab 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -6,11 +6,14 @@ file(GLOB VALA_SRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.vala */*.vala) if (${INDICATOR_FOUND}) - SET(DEFINES --define HAVE_APPINDICATOR) + LIST(APPEND DEFINES --define HAVE_APPINDICATOR) endif(${INDICATOR_FOUND}) +if (${INDICATOR3_FOUND}) + LIST(APPEND DEFINES --define HAVE_APPINDICATOR) +endif(${INDICATOR3_FOUND}) if (${GTK3_FOUND}) - SET(DEFINES --define HAVE_GTK_3) + LIST(APPEND DEFINES --define HAVE_GTK_3) endif(${GTK3_FOUND}) if (${GMENU3_FOUND}) diff --git a/src/deamon.vala b/src/deamon.vala index cec9539..ceecf1b 100644 --- a/src/deamon.vala +++ b/src/deamon.vala @@ -140,7 +140,6 @@ public class Deamon : GLib.Object { PieManager.init(); Icon.init(); ThemedIcon.init(); - RenderedText.init(); // launch the indicator this.indicator = new Indicator(); diff --git a/src/gui/aboutWindow.vala b/src/gui/aboutWindow.vala index ccd956a..e7faca3 100644 --- a/src/gui/aboutWindow.vala +++ b/src/gui/aboutWindow.vala @@ -68,7 +68,7 @@ public class AboutWindow: Gtk.AboutDialog { logo_icon_name: "gnome-pie", website: "http://www.simonschneegans.de/?page_id=12", website_label: "www.gnome-pie.simonschneegans.de", - version: "0.4.0" + version: "0.4.1" ); } } diff --git a/src/gui/iconSelectWindow.vala b/src/gui/iconSelectWindow.vala index d66c654..174c23d 100644 --- a/src/gui/iconSelectWindow.vala +++ b/src/gui/iconSelectWindow.vala @@ -234,7 +234,7 @@ public class IconSelectWindow : GLib.Object { // displays the filtered icons this.icon_view = new Gtk.IconView.with_model(this.icon_list_filtered); this.icon_view.item_width = 32; - this.icon_view.item_padding = 3; + this.icon_view.item_padding = 2; this.icon_view.pixbuf_column = 2; this.icon_view.tooltip_column = 0; @@ -309,13 +309,20 @@ public class IconSelectWindow : GLib.Object { } } + public static void clear_icons() { + if (icon_list != null) { + need_reload = true; + icon_list.clear(); + } + } + ///////////////////////////////////////////////////////////////////// /// Makes the window select the icon of the given Pie. ///////////////////////////////////////////////////////////////////// - public void set_pie(string id) { - string icon = PieManager.all_pies[id].icon; - + public void set_icon(string icon) { + this.active_icon = icon; + if (icon.contains("/")) { this.file_chooser.set_filename(icon); this.tabs.set_current_page(1); @@ -369,28 +376,24 @@ public class IconSelectWindow : GLib.Object { // disable sorting of the icon_view - else it's horribly slow this.icon_list.set_sort_column_id(-1, Gtk.SortType.ASCENDING); - - try { - // start loading in another thread - unowned Thread loader = Thread.create<void*>(load_thread, false); - loader.set_priority(ThreadPriority.LOW); - } catch (GLib.ThreadError e) { - error("Failed to create icon loader thread!"); - } - + + this.load_all.begin(); + // insert loaded icons every 200 ms Timeout.add(200, () => { while (this.load_queue.length() > 0) { var new_entry = this.load_queue.pop(); Gtk.TreeIter current; - this.icon_list.append(out current); - this.icon_list.set(current, 0, new_entry.name, + icon_list.append(out current); + icon_list.set(current, 0, new_entry.name, 1, new_entry.context, 2, new_entry.pixbuf); } // enable sorting of the icon_view if loading finished - if (!this.loading) this.icon_list.set_sort_column_id(0, Gtk.SortType.ASCENDING); + if (!this.loading) { + icon_list.set_sort_column_id(0, Gtk.SortType.ASCENDING); + } return loading; }); @@ -402,12 +405,13 @@ public class IconSelectWindow : GLib.Object { /// load_queue. ///////////////////////////////////////////////////////////////////// - private void* load_thread() { + private async void load_all() { var icon_theme = Gtk.IconTheme.get_default(); - + foreach (var context in icon_theme.list_contexts()) { if (!disabled_contexts.contains(context)) { foreach (var icon in icon_theme.list_icons(context)) { + IconContext icon_context = IconContext.OTHER; switch(context) { case "Apps": case "Applications": @@ -423,6 +427,9 @@ public class IconSelectWindow : GLib.Object { default: break; } + Idle.add(load_all.callback); + yield; + try { // create a new entry for the queue var new_entry = new ListEntry(); @@ -447,8 +454,6 @@ public class IconSelectWindow : GLib.Object { // hide the spinner if (spinner != null) spinner.visible = false; - - return null; } } diff --git a/src/gui/newSliceWindow.vala b/src/gui/newSliceWindow.vala index 4e38376..7bd6340 100644 --- a/src/gui/newSliceWindow.vala +++ b/src/gui/newSliceWindow.vala @@ -359,15 +359,16 @@ public class NewSliceWindow : GLib.Object { ///////////////////////////////////////////////////////////////////// private void on_icon_button_clicked(Gtk.Button button) { - if (icon_window == null) { - icon_window = new IconSelectWindow(this.window); - icon_window.on_ok.connect((icon) => { + if (this.icon_window == null) { + this.icon_window = new IconSelectWindow(this.window); + this.icon_window.on_ok.connect((icon) => { this.current_custom_icon = icon; this.set_icon(icon); }); } - icon_window.show(); + this.icon_window.show(); + this.icon_window.set_icon(this.current_icon); } ///////////////////////////////////////////////////////////////////// diff --git a/src/gui/preferencesWindow.vala b/src/gui/preferencesWindow.vala index 022e44b..933919b 100644 --- a/src/gui/preferencesWindow.vala +++ b/src/gui/preferencesWindow.vala @@ -129,6 +129,11 @@ public class PreferencesWindow : GLib.Object { // save settings on close Config.global.save(); Pies.save(); + + Timeout.add(100, () => { + IconSelectWindow.clear_icons(); + return false; + }); }); this.window.delete_event.connect(this.window.hide_on_delete); @@ -181,9 +186,7 @@ public class PreferencesWindow : GLib.Object { if (pie.icon.contains("/")) try { this.icon.pixbuf = new Gdk.Pixbuf.from_file_at_scale(pie.icon, - this.icon.get_pixel_size(), - this.icon.get_pixel_size(), - true); + this.icon.get_pixel_size(), this.icon.get_pixel_size(), true); } catch (GLib.Error error) { warning(error.message); } @@ -305,6 +308,7 @@ public class PreferencesWindow : GLib.Object { } this.icon_window.show(); + this.icon_window.set_icon(PieManager.all_pies[selected_id].icon); } } diff --git a/src/images/renderedText.vala b/src/images/renderedText.vala index e4bb4cb..41146d6 100644 --- a/src/images/renderedText.vala +++ b/src/images/renderedText.vala @@ -22,34 +22,6 @@ namespace GnomePie { ///////////////////////////////////////////////////////////////////////// public class RenderedText : Image { - - ///////////////////////////////////////////////////////////////////// - /// A cache which stores images. It is cleared when the theme of - /// Gnome-Pie changes. - /// The key is in form <string>@<width>x<height>:<font>. - ///////////////////////////////////////////////////////////////////// - - private static Gee.HashMap<string, Cairo.ImageSurface?> cache { private get; private set; } - - ///////////////////////////////////////////////////////////////////// - /// Initializes the cache. - ///////////////////////////////////////////////////////////////////// - - public static void init() { - clear_cache(); - - Config.global.notify["theme"].connect(() => { - clear_cache(); - }); - } - - ///////////////////////////////////////////////////////////////////// - /// Clears the cache. - ///////////////////////////////////////////////////////////////////// - - static void clear_cache() { - cache = new Gee.HashMap<string, Cairo.ImageSurface?>(); - } ///////////////////////////////////////////////////////////////////// /// C'tor, creates a new image representation of a string. @@ -58,16 +30,7 @@ public class RenderedText : Image { public RenderedText(string text, int width, int height, string font, Color color, double scale) { - var cached = this.cache.get("%s@%ux%u@%f:%s:%f:%f:%f:%f".printf(text, width, height, scale, font, - color.r, color.g, color.b, color.a)); - - if (cached == null) { - this.render_text(text, width, height, font, color, scale); - this.cache.set("%s@%ux%u@%f:%s:%f:%f:%f:%f".printf(text, width, height, scale, font, - color.r, color.g, color.b, color.a), this.surface); - } else { - this.surface = cached; - } + this.render_text(text, width, height, font, color, scale); } ///////////////////////////////////////////////////////////////////// @@ -77,17 +40,8 @@ public class RenderedText : Image { public RenderedText.with_markup(string text, int width, int height, string font, Color color, double scale) { - - var cached = this.cache.get("%s@%ux%u@%f:%s:%f:%f:%f:%f".printf(text, width, height, scale, font, - color.r, color.g, color.b, color.a)); - - if (cached == null) { - this.render_markup(text, width, height, font, color, scale); - this.cache.set("%s@%ux%u@%f:%s:%f:%f:%f:%f".printf(text, width, height, scale, font, - color.r, color.g, color.b, color.a), this.surface); - } else { - this.surface = cached; - } + + this.render_markup(text, width, height, font, color, scale); } ///////////////////////////////////////////////////////////////////// diff --git a/src/pies/pieManager.vala b/src/pies/pieManager.vala index 0263d23..162a61f 100644 --- a/src/pies/pieManager.vala +++ b/src/pies/pieManager.vala @@ -88,6 +88,10 @@ public class PieManager : GLib.Object { window.on_closed.connect(() => { opened_windows.remove(window); + if (opened_windows.size == 0) { + ThemedIcon.clear_cache(); + Icon.clear_cache(); + } }); window.on_closing.connect(() => { |