Merge lp:~osomon/unity/4.0-dash-custom-home-screen into lp:unity/4.0

Proposed by Olivier Tilloy
Status: Merged
Approved by: Gord Allott
Approved revision: 1722
Merged at revision: 1727
Proposed branch: lp:~osomon/unity/4.0-dash-custom-home-screen
Merge into: lp:unity/4.0
Diff against target: 544 lines (+389/-59)
8 files modified
manual-tests/custom-dash-home/HomeShortcutsCustomized-4-entries.json (+22/-0)
manual-tests/custom-dash-home/HomeShortcutsCustomized-8-entries.json (+44/-0)
manual-tests/custom-dash-home/HomeShortcutsCustomized-broken.json (+23/-0)
manual-tests/custom-dash-home/custom-dash-home.txt (+46/-0)
plugins/unityshell/src/JSONParser.cpp (+13/-0)
plugins/unityshell/src/JSONParser.h (+4/-0)
plugins/unityshell/src/PlacesHomeView.cpp (+233/-59)
plugins/unityshell/src/PlacesHomeView.h (+4/-0)
To merge this branch: bzr merge lp:~osomon/unity/4.0-dash-custom-home-screen
Reviewer Review Type Date Requested Status
Unity Team Pending
Review via email: mp+85852@code.launchpad.net

Commit message

Allow customizing the dash’s home screen.

The contents of the custom home screen are described in a JSON file called HomeShortcutsCustomized.json.

The file is looked for in the following locations in decreasing order of priority:
    - $XDG_CONFIG_HOME/unity/ (defaults to $HOME/.config/unity/)
    - $DIR/unity/ for $DIR in $XDG_CONFIG_DIRS

The syntax of the file is as follows:
==========================================================================
{
  "shortcut1": {
    "source": $source,
    "name": $name,
    "name[fr]": $name_in_french,
    […]
    "icon": $icon
  },
  "shortcut2": {
    […]
  },
  […]
}
==========================================================================

The source attribute may either be a desktop file (full path or just its basename if it is located in a standard directory), or a lens file (basename only). This attribute is mandatory.
The 'name' attribute is optional. If present, it will override the default display name as advertised by the desktop file or by the lens. The name can be localized in several languages using the square brackets suffix notation, in which case the locale matching the system’s will be used, defaulting to the untranslated 'name' attribute if necessary.
The 'icon' attribute is optional. If present, it will override the default icon as advertised by the desktop file or by the lens. It should be a full path name.
If the source is a lens, the optional 'filter' attribute allows specifying a filter in the form "$name:$value", e.g. "type:videos" for the files lens.
If the source is a lens, the optional 'section' attribute allows specifying a section number (an integer starting at index 0).

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added directory 'manual-tests'
=== added directory 'manual-tests/custom-dash-home'
=== added file 'manual-tests/custom-dash-home/HomeShortcutsCustomized-4-entries.json'
--- manual-tests/custom-dash-home/HomeShortcutsCustomized-4-entries.json 1970-01-01 00:00:00 +0000
+++ manual-tests/custom-dash-home/HomeShortcutsCustomized-4-entries.json 2011-12-15 12:51:34 +0000
@@ -0,0 +1,22 @@
1{
2 "shortcut1": {
3 "source": "/usr/share/applications/ubuntu-software-center.desktop",
4 "name": "Software Center",
5 "name[fr]": "Logithèque",
6 "icon": "/usr/share/icons/Humanity/places/64/start-here.svg"
7 },
8 "shortcut2": {
9 "source": "music.lens",
10 "filter": "genre:rock",
11 "name": "Rock Music"
12 },
13 "shortcut3": {
14 "source": "files.lens",
15 "filter": "type:videos",
16 "name": "Vidéos",
17 "icon": "/usr/share/icons/Humanity/actions/64/help-about.svg"
18 },
19 "shortcut4": {
20 "source": "transmission-gtk.desktop"
21 }
22}
023
=== added file 'manual-tests/custom-dash-home/HomeShortcutsCustomized-8-entries.json'
--- manual-tests/custom-dash-home/HomeShortcutsCustomized-8-entries.json 1970-01-01 00:00:00 +0000
+++ manual-tests/custom-dash-home/HomeShortcutsCustomized-8-entries.json 2011-12-15 12:51:34 +0000
@@ -0,0 +1,44 @@
1{
2 "shortcut1": {
3 "source": "/usr/share/applications/ubuntu-software-center.desktop",
4 "name": "Software Center",
5 "name[fr]": "Logithèque",
6 "icon": "/usr/share/icons/Humanity/places/64/start-here.svg"
7 },
8 "shortcut2": {
9 "source": "music.lens",
10 "filter": "genre:rock",
11 "name": "Rock Music"
12 },
13 "shortcut3": {
14 "source": "files.lens",
15 "filter": "type:videos",
16 "name": "Vidéos",
17 "icon": "/usr/share/icons/Humanity/actions/64/help-about.svg"
18 },
19 "shortcut4": {
20 "source": "transmission-gtk.desktop"
21 },
22 "shortcut5": {
23 "source": "/usr/share/applications/eog.desktop",
24 "name": "Eye Of Gnome",
25 "name[de]": "Auge des Zwergs",
26 "icon": "/usr/share/icons/hicolor/scalable/apps/eog.svg"
27 },
28 "shortcut6": {
29 "source": "/usr/share/applications/jockey-gtk.desktop",
30 "name": "Jockey",
31 "name[de]": "Jockey",
32 "icon": "/usr/share/icons/hicolor/scalable/apps/jockey.svg"
33 },
34 "shortcut7": {
35 "source": "/usr/share/applications/gwibber.desktop",
36 "name": "gwibber",
37 "icon": "/usr/share/icons/hicolor/scalable/apps/gwibber.svg"
38 },
39 "shortcut8": {
40 "source": "/usr/share/applications/giggle.desktop",
41 "name": "Giggle",
42 "icon": "/usr/share/icons/hicolor/scalable/apps/giggle.svg"
43 }
44}
045
=== added file 'manual-tests/custom-dash-home/HomeShortcutsCustomized-broken.json'
--- manual-tests/custom-dash-home/HomeShortcutsCustomized-broken.json 1970-01-01 00:00:00 +0000
+++ manual-tests/custom-dash-home/HomeShortcutsCustomized-broken.json 2011-12-15 12:51:34 +0000
@@ -0,0 +1,23 @@
1this is some intentional garbage with lots of errors
2{
3 "shortcut1": {
4 "source": "/usr/share/applications/ubuntu-software-center.desktop",
5 "name": "Software Center",
6 "name[fr]": "Logithèque",
7 "icn": "/usr/share/icons/Humanity/places/64/start-here.svg"
8 },
9 "shortcut2": {
10 "sorce": "music.lens",
11 "filter": "genre:rock",
12 "name": "Rock Music"
13 },
14 "shortcut3": {
15 "source": "files.lens",
16 "filter": "type:videos",
17 "name": "Vidéos",
18 "icon": "/usr/share/icons/Humanity/actions/64/hep-about.svg"
19 },
20 "shortcut12": {
21 "source": "transmission-gtk.destop"
22 }
23}
024
=== added file 'manual-tests/custom-dash-home/custom-dash-home.txt'
--- manual-tests/custom-dash-home/custom-dash-home.txt 1970-01-01 00:00:00 +0000
+++ manual-tests/custom-dash-home/custom-dash-home.txt 2011-12-15 12:51:34 +0000
@@ -0,0 +1,46 @@
1Manual tests for the 'dash custom home screen' functionality
2============================================================
3
4How to test
5-----------
6
7To test the functionality, create the folder $HOME/.config/unity/, and copy the
8three files HomeShortcutsCustomized*.json there.
9
10Then for each of them repeat the following steps:
11
12 cd $HOME/.config/unity/
13 rm HomeShortcutsCustomized.json
14 ln -s $FILE HomeShortcutsCustomized.json # replace $FILE with the json file being considered
15 # restart unity
16 # open the dash
17 # check the visual appearance against the expected results detailed below
18
19
20Expected results
21----------------
22
23With 'HomeShortcutsCustomized-4-entries.json', the home screen of the dash
24contains 4 icons that fill the first row. The second row is empty.
25Those icons are:
26 - "Software Center": launches the Ubuntu Software Center, the icon is the
27 Ubuntu Circle Of Friends, and if you are running with a French locale the
28 name is localized to "Logithèque".
29 - "Rock Music": opens the music lens with the genre filter set to "Rock".
30 - "Vidéos": opens the files lens with the type filter set to "videos", the icon
31 is a yellow star.
32 - "Transmission BitTorrent Client": launches transmission-gtk.
33
34With 'HomeShortcutsCustomized-8-entries.json', the home screen of the dash
35contains 8 icons that fill the two rows. The first row contains the exact same
36icons as 'HomeShortcutsCustomized-4-entries.json' (see details above). The icons
37on the second row are:
38 - "Eye Of Gnome": launches eog, if you are running with a German locale the
39 name is localized to "Auge des Zwergs".
40 - "Jockey": launches jockey-gtk.
41 - "gwibber": launches gwibber.
42 - "Giggle": this icon appears only if giggle is installed, it launches giggle.
43
44With 'HomeShortcutsCustomized-broken.json', the home screen of the dash contains
45the default icons because the file fails to be parsed.
46
047
=== modified file 'plugins/unityshell/src/JSONParser.cpp'
--- plugins/unityshell/src/JSONParser.cpp 2011-09-15 04:28:49 +0000
+++ plugins/unityshell/src/JSONParser.cpp 2011-12-15 12:51:34 +0000
@@ -145,6 +145,19 @@
145 values[i] = json_array_get_double_element(array, i);145 values[i] = json_array_get_double_element(array, i);
146}146}
147147
148void Parser::ReadString(std::string const& node_name,
149 std::string const& member_name,
150 std::string& value) const
151{
152 JsonObject* object = GetNodeObject(node_name);
153
154 if (!object)
155 return;
156
157 if (json_object_has_member(object, member_name.c_str()))
158 value = json_object_get_string_member(object, member_name.c_str());
159}
160
148void Parser::ReadColor(std::string const& node_name,161void Parser::ReadColor(std::string const& node_name,
149 std::string const& member_name,162 std::string const& member_name,
150 std::string const& opacity_name,163 std::string const& opacity_name,
151164
=== modified file 'plugins/unityshell/src/JSONParser.h'
--- plugins/unityshell/src/JSONParser.h 2011-09-15 04:28:49 +0000
+++ plugins/unityshell/src/JSONParser.h 2011-12-15 12:51:34 +0000
@@ -58,6 +58,10 @@
58 std::string const& member_name,58 std::string const& member_name,
59 std::vector<double>& values) const;59 std::vector<double>& values) const;
6060
61 void ReadString(std::string const& node_name,
62 std::string const& member_name,
63 std::string& value) const;
64
61 void ReadColor(std::string const& node_name,65 void ReadColor(std::string const& node_name,
62 std::string const& member_name,66 std::string const& member_name,
63 std::string const& opacity_name,67 std::string const& opacity_name,
6468
=== modified file 'plugins/unityshell/src/PlacesHomeView.cpp'
--- plugins/unityshell/src/PlacesHomeView.cpp 2011-09-02 03:40:15 +0000
+++ plugins/unityshell/src/PlacesHomeView.cpp 2011-12-15 12:51:34 +0000
@@ -39,16 +39,25 @@
3939
40#include "PlacesHomeView.h"40#include "PlacesHomeView.h"
4141
42#include "JSONParser.h"
42#include "PlacesSimpleTile.h"43#include "PlacesSimpleTile.h"
43#include "PlacesStyle.h"44#include "PlacesStyle.h"
44#include <UnityCore/GLibWrapper.h>45#include <UnityCore/GLibWrapper.h>
45#include <UnityCore/Variant.h>46#include <UnityCore/Variant.h>
4647
48#include <sstream>
47#include <string>49#include <string>
48#include <vector>50#include <vector>
4951
52#include <boost/algorithm/string.hpp>
53
50#define DELTA_DOUBLE_REQUEST 50000000054#define DELTA_DOUBLE_REQUEST 500000000
5155
56namespace
57{
58 const std::string custom_shortcuts_file = "/unity/HomeShortcutsCustomized.json";
59}
60
52namespace unity61namespace unity
53{62{
5463
@@ -136,7 +145,9 @@
136145
137 expanded.connect(sigc::mem_fun(this, &PlacesHomeView::Refresh));146 expanded.connect(sigc::mem_fun(this, &PlacesHomeView::Refresh));
138147
139 Refresh();148 // Wait for the asynchronous loading of the lenses to complete
149 // before refreshing the view for the first time.
150 _lenses.lenses_loaded.connect(sigc::bind(sigc::mem_fun(this, &PlacesHomeView::Refresh), (PlacesGroup*) NULL));
140}151}
141152
142PlacesHomeView::~PlacesHomeView()153PlacesHomeView::~PlacesHomeView()
@@ -163,64 +174,227 @@
163174
164 _layout->Clear();175 _layout->Clear();
165176
166 // Media Apps177 // The following code path allows one to replace the default dash home screen
167 markup = g_strdup_printf(temp, _("Media Apps"));178 // with a custom home screen, the contents of which are described in a JSON
168 shortcut = new Shortcut(PKGDATADIR"/find_media_apps.png",179 // file. The file is looked for in the following locations in decreasing order
169 markup,180 // of priority:
170 icon_size);181 // - $XDG_CONFIG_HOME/unity/ (defaults to $HOME/.config/unity/)
171 shortcut->_id = TYPE_PLACE;182 // - $DIR/unity/ for $DIR in $XDG_CONFIG_DIRS
172 shortcut->_place_id = g_strdup("applications.lens?filter_type=media");183 // The syntax of the file is as follows:
173 shortcut->_place_section = 9;184 // ==========================================================================
174 _layout->AddView(shortcut, 1, nux::eLeft, nux::eFull);185 // {
175 shortcut->sigClick.connect(sigc::mem_fun(this, &PlacesHomeView::OnShortcutClicked));186 // "shortcut1": {
176 g_free(markup);187 // "source": $source,
177188 // "name": $name,
178 // Internet Apps189 // "name[fr]": $name_in_french,
179 markup = g_strdup_printf(temp, _("Internet Apps"));190 // […]
180 shortcut = new Shortcut(PKGDATADIR"/find_internet_apps.png",191 // "icon": $icon
181 markup,192 // },
182 icon_size);193 // "shortcut2": {
183 shortcut->_id = TYPE_PLACE;194 // […]
184 shortcut->_place_id = g_strdup("applications.lens?filter_type=internet");195 // },
185 shortcut->_place_section = 8;196 // […]
186 _layout->AddView(shortcut, 1, nux::eLeft, nux::eFull);197 // }
187 shortcut->sigClick.connect(sigc::mem_fun(this, &PlacesHomeView::OnShortcutClicked));198 // ==========================================================================
188 g_free(markup);199 // The source attribute may either be a desktop file (full path or just its
189200 // basename if it is located in a standard directory), or a lens file
190 // More Apps201 // (basename only). This attribute is mandatory.
191 markup = g_strdup_printf(temp, _("More Apps"));202 // The 'name' attribute is optional. If present, it will override the default
192 shortcut = new Shortcut(PKGDATADIR"/find_more_apps.png",203 // display name as advertised by the desktop file or by the lens. The name can
193 markup,204 // be localized in several languages using the square brackets suffix
194 icon_size);205 // notation, in which case the locale matching the system’s will be used,
195 shortcut->_id = TYPE_PLACE;206 // defaulting to the untranslated 'name' attribute if necessary.
196 shortcut->_place_id = g_strdup("applications.lens");207 // The 'icon' attribute is optional. If present, it will override the default
197 shortcut->_place_section = 0;208 // icon as advertised by the desktop file or by the lens. It should be a full
198 _layout->AddView(shortcut, 1, nux::eLeft, nux::eFull);209 // path name.
199 shortcut->sigClick.connect(sigc::mem_fun(this, &PlacesHomeView::OnShortcutClicked));210 // If the source is a lens, the optional 'filter' attribute allows specifying
200 g_free(markup);211 // a filter in the form "$name:$value", e.g. "type:videos" for the files lens.
201212 // If the source is a lens, the optional 'section' attribute allows specifying
202 // Find Files213 // a section number (an integer starting at index 0).
203 markup = g_strdup_printf(temp, _("Find Files"));214
204 shortcut = new Shortcut(PKGDATADIR"/find_files.png",215 std::string customShortcuts;
205 markup,216 std::ostringstream file;
206 icon_size);217 // Look for a custom shortcuts file in the user’s home directory first.
207 shortcut->_id = TYPE_PLACE;218 file << g_get_user_config_dir() << custom_shortcuts_file;
208 shortcut->_place_id = g_strdup("files.lens");219 if (g_file_test(file.str().c_str(), G_FILE_TEST_EXISTS))
209 shortcut->_place_section = 0;220 {
210 _layout->AddView(shortcut, 1, nux::eLeft, nux::eFull);221 customShortcuts = file.str();
211 shortcut->sigClick.connect(sigc::mem_fun(this, &PlacesHomeView::OnShortcutClicked));222 }
212 g_free(markup);223 else
213224 {
214 // Browser225 // Fall back on the standard XDG directories.
215 CreateShortcutFromMime("x-scheme-handler/http", _("Browse the Web"), _browser_alternatives);226 gchar** config = (gchar**) g_get_system_config_dirs();
216227 for (gint i = 0; config[i]; ++i)
217 // Photos228 {
218 // FIXME: Need to figure out the default229 std::ostringstream file;
219 CreateShortcutFromExec("shotwell", _("View Photos"), _photo_alternatives);230 file << config[i] << custom_shortcuts_file;
220231 if (g_file_test(file.str().c_str(), G_FILE_TEST_EXISTS))
221 CreateShortcutFromMime("x-scheme-handler/mailto", _("Check Email"), _email_alternatives);232 {
222233 customShortcuts = file.str();
223 CreateShortcutFromMime("audio/x-vorbis+ogg", _("Listen to Music"), _music_alternatives);234 break;
235 }
236 }
237 }
238 json::Parser parser;
239 if ((customShortcuts == "") || !parser.Open(customShortcuts))
240 {
241 // Media Apps
242 markup = g_strdup_printf(temp, _("Media Apps"));
243 shortcut = new Shortcut(PKGDATADIR"/find_media_apps.png",
244 markup,
245 icon_size);
246 shortcut->_id = TYPE_PLACE;
247 shortcut->_place_id = g_strdup("applications.lens?filter_type=media");
248 shortcut->_place_section = 9;
249 _layout->AddView(shortcut, 1, nux::eLeft, nux::eFull);
250 shortcut->sigClick.connect(sigc::mem_fun(this, &PlacesHomeView::OnShortcutClicked));
251 g_free(markup);
252
253 // Internet Apps
254 markup = g_strdup_printf(temp, _("Internet Apps"));
255 shortcut = new Shortcut(PKGDATADIR"/find_internet_apps.png",
256 markup,
257 icon_size);
258 shortcut->_id = TYPE_PLACE;
259 shortcut->_place_id = g_strdup("applications.lens?filter_type=internet");
260 shortcut->_place_section = 8;
261 _layout->AddView(shortcut, 1, nux::eLeft, nux::eFull);
262 shortcut->sigClick.connect(sigc::mem_fun(this, &PlacesHomeView::OnShortcutClicked));
263 g_free(markup);
264
265 // More Apps
266 markup = g_strdup_printf(temp, _("More Apps"));
267 shortcut = new Shortcut(PKGDATADIR"/find_more_apps.png",
268 markup,
269 icon_size);
270 shortcut->_id = TYPE_PLACE;
271 shortcut->_place_id = g_strdup("applications.lens");
272 shortcut->_place_section = 0;
273 _layout->AddView(shortcut, 1, nux::eLeft, nux::eFull);
274 shortcut->sigClick.connect(sigc::mem_fun(this, &PlacesHomeView::OnShortcutClicked));
275 g_free(markup);
276
277 // Find Files
278 markup = g_strdup_printf(temp, _("Find Files"));
279 shortcut = new Shortcut(PKGDATADIR"/find_files.png",
280 markup,
281 icon_size);
282 shortcut->_id = TYPE_PLACE;
283 shortcut->_place_id = g_strdup("files.lens");
284 shortcut->_place_section = 0;
285 _layout->AddView(shortcut, 1, nux::eLeft, nux::eFull);
286 shortcut->sigClick.connect(sigc::mem_fun(this, &PlacesHomeView::OnShortcutClicked));
287 g_free(markup);
288
289 // Browser
290 CreateShortcutFromMime("x-scheme-handler/http", _("Browse the Web"), _browser_alternatives);
291
292 // Photos
293 // FIXME: Need to figure out the default
294 CreateShortcutFromExec("shotwell", _("View Photos"), _photo_alternatives);
295
296 CreateShortcutFromMime("x-scheme-handler/mailto", _("Check Email"), _email_alternatives);
297
298 CreateShortcutFromMime("audio/x-vorbis+ogg", _("Listen to Music"), _music_alternatives);
299 }
300 else
301 {
302 // The custom shortcuts file can contain up to 8 shortcuts.
303 for (int i = 0; i < 8; ++i)
304 {
305 std::ostringstream oss;
306 oss << "shortcut" << (i + 1);
307 std::string slot = oss.str();
308 std::string source;
309 parser.ReadString(slot, "source", source);
310 if (source != "")
311 {
312 std::string icon;
313 parser.ReadString(slot, "icon", icon);
314
315 std::string name;
316 gchar** languages = (gchar**) g_get_language_names();
317 for (gint i = 0; languages[i]; ++i)
318 {
319 std::ostringstream key;
320 key << "name[" << languages[i] << "]";
321 parser.ReadString(slot, key.str(), name);
322 if (name != "")
323 break;
324 }
325 if (name == "")
326 {
327 parser.ReadString(slot, "name", name);
328 }
329
330 if (boost::iends_with(source, ".desktop"))
331 {
332 GDesktopAppInfo* info = NULL;
333 if (boost::istarts_with(source, "/"))
334 info = g_desktop_app_info_new_from_filename(source.c_str());
335 else
336 info = g_desktop_app_info_new(source.c_str());
337 if (G_IS_DESKTOP_APP_INFO(info))
338 {
339 if (name == "")
340 name = g_app_info_get_display_name(G_APP_INFO(info));
341 if (icon == "")
342 {
343 gchar* cicon = g_icon_to_string(g_app_info_get_icon(G_APP_INFO(info)));
344 icon = cicon;
345 g_free(cicon);
346 }
347 gchar* exec = g_strdup(g_app_info_get_executable(G_APP_INFO(info)));
348 markup = g_strdup_printf(temp, name.c_str());
349 shortcut = new Shortcut(icon.c_str(), markup, style->GetHomeTileIconSize());
350 shortcut->_id = TYPE_EXEC;
351 shortcut->_exec = exec;
352 _layout->AddView(shortcut, 1, nux::eLeft, nux::eFull);
353 shortcut->sigClick.connect(sigc::mem_fun(this, &PlacesHomeView::OnShortcutClicked));
354 g_free(markup);
355 g_object_unref(info);
356 }
357 }
358 else if (boost::iends_with(source, ".lens"))
359 {
360 unity::dash::Lens::Ptr lens = _lenses.GetLens(source);
361 if (lens)
362 {
363 if (name == "")
364 name = lens->name;
365 if (icon == "")
366 icon = lens->icon_hint;
367 }
368 std::string filter;
369 parser.ReadString(slot, "filter", filter);
370 int section = -1;
371 parser.ReadInt(slot, "section", section);
372 markup = g_strdup_printf(temp, name.c_str());
373 shortcut = new Shortcut(icon.c_str(), markup, style->GetHomeTileIconSize());
374 shortcut->_id = TYPE_PLACE;
375 if (filter != "")
376 {
377 std::vector<std::string> filter_key_value;
378 boost::split(filter_key_value, filter, boost::is_any_of(":"));
379 if (filter_key_value.size() == 2)
380 shortcut->_place_id = g_strdup_printf("%s?filter_%s=%s",
381 source.c_str(),
382 filter_key_value[0].c_str(),
383 filter_key_value[1].c_str());
384 else
385 shortcut->_place_id = g_strdup(source.c_str());
386 }
387 else
388 shortcut->_place_id = g_strdup(source.c_str());
389 if (section != -1)
390 shortcut->_place_section = section;
391 _layout->AddView(shortcut, 1, nux::eLeft, nux::eFull);
392 shortcut->sigClick.connect(sigc::mem_fun(this, &PlacesHomeView::OnShortcutClicked));
393 g_free(markup);
394 }
395 }
396 }
397 }
224398
225 SetExpanded(true);399 SetExpanded(true);
226 SetCounts(8, 8);400 SetCounts(8, 8);
227401
=== modified file 'plugins/unityshell/src/PlacesHomeView.h'
--- plugins/unityshell/src/PlacesHomeView.h 2011-09-02 03:40:15 +0000
+++ plugins/unityshell/src/PlacesHomeView.h 2011-12-15 12:51:34 +0000
@@ -29,6 +29,8 @@
2929
30#include <Nux/GridHLayout.h>30#include <Nux/GridHLayout.h>
3131
32#include <UnityCore/FilesystemLenses.h>
33
32#include "PlacesTile.h"34#include "PlacesTile.h"
33#include "PlacesGroup.h"35#include "PlacesGroup.h"
3436
@@ -67,6 +69,8 @@
67 std::vector<std::string> _music_alternatives;69 std::vector<std::string> _music_alternatives;
6870
69 guint _ubus_handle;71 guint _ubus_handle;
72
73 unity::dash::FilesystemLenses _lenses;
70};74};
7175
72}76}

Subscribers

People subscribed via source and target branches

to all changes: